Intro
# Author: Paige (Spencer) Vega, Vanderbilt University, Ken Lau lab
# This tutorial was modified from Seurat's tutorials available at the links below:
# https://satijalab.org/seurat/pbmc3k_tutorial.html
# https://satijalab.org/seurat/immune_alignment.html
# You can also learn more about the Seurat tool by reading their paper:
# https://www.nature.com/articles/nbt.4096
Learning goals
# We have a few learning goals in this section of the analysis.
# 1. Check the quality of your data and filter it.
# 2. Normalize, scale, and find highly variable genes (HVGs).
# 3. Dimension reduction.
# 4. Differential gene expression.
Call on the Seurat function
# load in the Seurat package
library(Seurat)
Loading required package: ggplot2
Loading required package: cowplot
Attaching package: ‘cowplot’
The following object is masked from ‘package:ggplot2’:
ggsave
Loading required package: Matrix
# set your working directory
directory<-setwd("/Users/paigevega/Desktop/CQS_2018_DiscoveryOrientedDataScience")
Load in your data and create Seurat object
# load in the data
# 35,635 rows (genes)
# 13,019 cells (names are barcodes)
pbmc.data <- read.table(paste(directory,"/immune_control_expression_matrix.txt.gz", sep = ""), sep = "\t")
# Create the Seurat object with the raw (non-normalized data). Keep all genes expressed in >= 5 cells.
pbmc <- CreateSeuratObject(raw.data = pbmc.data, min.cells = 5, project = "control_PBMC")
# pbmc@raw.data
Filtering
# The number of genes and UMIs (nGene and nUMI) are automatically calculated
# for every object by Seurat. Use violin plots to visualize number genes and number UMIs.
VlnPlot(object = pbmc, features.plot = c("nGene", "nUMI"), nCol = 2, point.size.use = 0.01)

# Note: finding the percent mitochondrial genes for a dataset is a common QC metric, but, this dataset is already pre-processed to remove cells that have mitochondrial gene expression.
# GenePlot is typically used to visualize gene-gene relationships, but can be used to see how any two variables correlate. We will use it to see how number UMIs correlate to number of genes.
# by the way, what would be "bad" and what would be "good"?
# bad = low nGene with high nUMI => means there are few types of genes with high expression
# good = linear correlation nGene to nUMI, with nUMI about 3-5X greater than nGene
GenePlot(object = pbmc, gene1 = "nUMI", gene2 = "nGene")

# Note: if you're trying to remove cells expressing high % mitochondrial genes, plot nUMI to % mito and QC from there.
# Based on the violin plot, filter out cells by choosing low and high thresholds.
# get rid of cells with very few nGenes or way too many nGene
pbmc <- FilterCells(object = pbmc, subset.names = "nGene", low.thresholds = 200, high.thresholds = 1800)
# if you were removing cells with high % mito expression, remove them here with appropriate thresholds.
# pbmc@raw.data
Normalization
# Normalize the data - log normalization is default.
pbmc <- NormalizeData(object = pbmc)
Performing log-normalization
0% 10 20 30 40 50 60 70 80 90 100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
# pbmc@data
Find highly variable genes (HVGs)
# Find the highly variable genes
# identifies outliers on a 'mean variability plot', with mean expression on the x-axis and # dispersion on the y-axis. Corrects for the dependence on the average expression by using
# binning. See ?FindVariableGenes for details.
pbmc <- FindVariableGenes(pbmc)
Calculating gene means
0% 10 20 30 40 50 60 70 80 90 100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
Calculating gene variance to mean ratios
0% 10 20 30 40 50 60 70 80 90 100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|

# pbmc@var.genes # contains variable genes
# pbmc@hvg.info # contains results of HVG analysis
Scale data
# removes "uninteresting sources of variation", like technical noise, or cell cycle
# linear regression to predict gene expression. See ?ScaleData for more information.
pbmc <- ScaleData(pbmc)
Scaling data matrix
|
| | 0%
|
|====== | 7%
|
|============ | 14%
|
|================== | 21%
|
|======================= | 29%
|
|============================= | 36%
|
|=================================== | 43%
|
|========================================= | 50%
|
|=============================================== | 57%
|
|===================================================== | 64%
|
|=========================================================== | 71%
|
|================================================================ | 79%
|
|====================================================================== | 86%
|
|============================================================================ | 93%
|
|==================================================================================| 100%
# pbmc@scale.data
Dimensionality reduction (PCA)
# Run PCA using the HVGs
pbmc <- RunPCA(object = pbmc, pc.genes = pbmc@var.genes, pcs.compute = 30, do.print = FALSE)
# pbmc@dr$pca
Choose PCs
# Principle components (PCs) capture the variability in your dataset. Although we specified 30 PCs, we want to use only the PCs that capture variability and discard the rest for downstream analyses. You look for saturation (flatline) in the relationship between the number of principle components and the percentage of the variance explained.
# 3 ways to look at PCs...
# 1. Elbow plot of principal components
PCElbowPlot(object = pbmc, num.pc = 30)

# 2. Heatmap of individual PCs
PCHeatmap(object = pbmc, pc.use = 1:15, cells.use = 500, do.balanced = TRUE, label.column = FALSE, use.full = FALSE)

PCHeatmap(object = pbmc, pc.use = 16:30, cells.use = 500, do.balanced = TRUE, label.column = FALSE, use.full = FALSE)

# 3. Jackstraw package to determine statistically significant principal components
pbmc <- JackStraw(object = pbmc, num.pc = 30, num.replicate = 100, display.progress = TRUE)
|
| | 0%
|
|= | 1%
|
|== | 2%
|
|== | 3%
|
|=== | 4%
|
|==== | 5%
|
|===== | 6%
|
|====== | 7%
|
|======= | 8%
|
|======= | 9%
|
|======== | 10%
|
|========= | 11%
|
|========== | 12%
|
|=========== | 13%
|
|=========== | 14%
|
|============ | 15%
|
|============= | 16%
|
|============== | 17%
|
|=============== | 18%
|
|================ | 19%
|
|================ | 20%
|
|================= | 21%
|
|================== | 22%
|
|=================== | 23%
|
|==================== | 24%
|
|==================== | 25%
|
|===================== | 26%
|
|====================== | 27%
|
|======================= | 28%
|
|======================== | 29%
|
|========================= | 30%
|
|========================= | 31%
|
|========================== | 32%
|
|=========================== | 33%
|
|============================ | 34%
|
|============================= | 35%
|
|============================== | 36%
|
|============================== | 37%
|
|=============================== | 38%
|
|================================ | 39%
|
|================================= | 40%
|
|================================== | 41%
|
|================================== | 42%
|
|=================================== | 43%
|
|==================================== | 44%
|
|===================================== | 45%
|
|====================================== | 46%
|
|======================================= | 47%
|
|======================================= | 48%
|
|======================================== | 49%
|
|========================================= | 50%
|
|========================================== | 51%
|
|=========================================== | 52%
|
|=========================================== | 53%
|
|============================================ | 54%
|
|============================================= | 55%
|
|============================================== | 56%
|
|=============================================== | 57%
|
|================================================ | 58%
|
|================================================ | 59%
|
|================================================= | 60%
|
|================================================== | 61%
|
|=================================================== | 62%
|
|==================================================== | 63%
|
|==================================================== | 64%
|
|===================================================== | 65%
|
|====================================================== | 66%
|
|======================================================= | 67%
|
|======================================================== | 68%
|
|========================================================= | 69%
|
|========================================================= | 70%
|
|========================================================== | 71%
|
|=========================================================== | 72%
|
|============================================================ | 73%
|
|============================================================= | 74%
|
|============================================================== | 75%
|
|============================================================== | 76%
|
|=============================================================== | 77%
|
|================================================================ | 78%
|
|================================================================= | 79%
|
|================================================================== | 80%
|
|================================================================== | 81%
|
|=================================================================== | 82%
|
|==================================================================== | 83%
|
|===================================================================== | 84%
|
|====================================================================== | 85%
|
|======================================================================= | 86%
|
|======================================================================= | 87%
|
|======================================================================== | 88%
|
|========================================================================= | 89%
|
|========================================================================== | 90%
|
|=========================================================================== | 91%
|
|=========================================================================== | 92%
|
|============================================================================ | 93%
|
|============================================================================= | 94%
|
|============================================================================== | 95%
|
|=============================================================================== | 96%
|
|================================================================================ | 97%
|
|================================================================================ | 98%
|
|================================================================================= | 99%
|
|==================================================================================| 100%
Time Elapsed: 20.3681108673414 mins
JackStrawPlot(object = pbmc, PCs = 1:30)
An object of class seurat in project control_PBMC
13537 genes across 12927 samples.

Use PCs to cluster and visualize clustering with t-SNE
# Clustering using Seurat's method. See more info in ?FindClusters.
# specify the number of PCs using dims.use
pbmc <- FindClusters(object = pbmc, reduction.type = "pca", dims.use = 1:20, resolution = 0.6,
print.output = 0, save.SNN = TRUE)
# pbmc@ident
# Run dimension reduction (t-SNE) to visualize the clustering
pbmc <- Seurat::RunTSNE(object = pbmc, dims.use = 1:20, do.fast = TRUE)
TSNEPlot(object = pbmc)

Differential gene expression - one cluster at a time
# cluster 1 vs all other clusters pooled together
cluster1.markers <- FindMarkers(object = pbmc, ident.1 = 1, min.pct = 0.25)
| | 0 % ~calculating
|+ | 1 % ~03m 48s
|+ | 2 % ~03m 24s
|++ | 3 % ~03m 08s
|++ | 4 % ~02m 60s
|+++ | 5 % ~02m 49s
|+++ | 6 % ~02m 40s
|++++ | 7 % ~02m 35s
|++++ | 8 % ~02m 33s
|+++++ | 9 % ~02m 33s
|+++++ | 10% ~02m 29s
|++++++ | 11% ~02m 25s
|++++++ | 12% ~02m 24s
|+++++++ | 13% ~02m 22s
|+++++++ | 14% ~02m 23s
|++++++++ | 15% ~02m 21s
|++++++++ | 16% ~02m 18s
|+++++++++ | 17% ~02m 16s
|+++++++++ | 18% ~02m 14s
|++++++++++ | 19% ~02m 11s
|++++++++++ | 20% ~02m 08s
|+++++++++++ | 21% ~02m 06s
|+++++++++++ | 22% ~02m 05s
|++++++++++++ | 23% ~02m 05s
|++++++++++++ | 24% ~02m 03s
|+++++++++++++ | 25% ~02m 04s
|+++++++++++++ | 26% ~02m 01s
|++++++++++++++ | 27% ~02m 01s
|++++++++++++++ | 28% ~01m 58s
|+++++++++++++++ | 29% ~01m 56s
|+++++++++++++++ | 30% ~01m 55s
|++++++++++++++++ | 31% ~01m 53s
|++++++++++++++++ | 32% ~01m 50s
|+++++++++++++++++ | 33% ~01m 48s
|+++++++++++++++++ | 34% ~01m 46s
|++++++++++++++++++ | 35% ~01m 45s
|++++++++++++++++++ | 36% ~01m 44s
|+++++++++++++++++++ | 37% ~01m 42s
|+++++++++++++++++++ | 38% ~01m 40s
|++++++++++++++++++++ | 39% ~01m 38s
|++++++++++++++++++++ | 40% ~01m 36s
|+++++++++++++++++++++ | 41% ~01m 34s
|+++++++++++++++++++++ | 42% ~01m 33s
|++++++++++++++++++++++ | 43% ~01m 32s
|++++++++++++++++++++++ | 44% ~01m 30s
|+++++++++++++++++++++++ | 45% ~01m 28s
|+++++++++++++++++++++++ | 46% ~01m 26s
|++++++++++++++++++++++++ | 47% ~01m 25s
|++++++++++++++++++++++++ | 48% ~01m 24s
|+++++++++++++++++++++++++ | 49% ~01m 22s
|+++++++++++++++++++++++++ | 50% ~01m 21s
|++++++++++++++++++++++++++ | 51% ~01m 20s
|++++++++++++++++++++++++++ | 52% ~01m 19s
|+++++++++++++++++++++++++++ | 53% ~01m 17s
|+++++++++++++++++++++++++++ | 54% ~01m 15s
|++++++++++++++++++++++++++++ | 55% ~01m 14s
|++++++++++++++++++++++++++++ | 56% ~01m 12s
|+++++++++++++++++++++++++++++ | 57% ~01m 10s
|+++++++++++++++++++++++++++++ | 58% ~01m 09s
|++++++++++++++++++++++++++++++ | 59% ~01m 07s
|++++++++++++++++++++++++++++++ | 60% ~01m 05s
|+++++++++++++++++++++++++++++++ | 61% ~01m 04s
|+++++++++++++++++++++++++++++++ | 62% ~01m 02s
|++++++++++++++++++++++++++++++++ | 63% ~01m 00s
|++++++++++++++++++++++++++++++++ | 64% ~58s
|+++++++++++++++++++++++++++++++++ | 65% ~57s
|+++++++++++++++++++++++++++++++++ | 66% ~55s
|++++++++++++++++++++++++++++++++++ | 67% ~54s
|++++++++++++++++++++++++++++++++++ | 68% ~52s
|+++++++++++++++++++++++++++++++++++ | 69% ~50s
|+++++++++++++++++++++++++++++++++++ | 70% ~49s
|++++++++++++++++++++++++++++++++++++ | 71% ~47s
|++++++++++++++++++++++++++++++++++++ | 72% ~46s
|+++++++++++++++++++++++++++++++++++++ | 73% ~44s
|+++++++++++++++++++++++++++++++++++++ | 74% ~42s
|++++++++++++++++++++++++++++++++++++++ | 75% ~41s
|++++++++++++++++++++++++++++++++++++++ | 76% ~39s
|+++++++++++++++++++++++++++++++++++++++ | 77% ~37s
|+++++++++++++++++++++++++++++++++++++++ | 78% ~36s
|++++++++++++++++++++++++++++++++++++++++ | 79% ~34s
|++++++++++++++++++++++++++++++++++++++++ | 80% ~32s
|+++++++++++++++++++++++++++++++++++++++++ | 81% ~31s
|+++++++++++++++++++++++++++++++++++++++++ | 82% ~29s
|++++++++++++++++++++++++++++++++++++++++++ | 83% ~27s
|++++++++++++++++++++++++++++++++++++++++++ | 84% ~26s
|+++++++++++++++++++++++++++++++++++++++++++ | 85% ~24s
|+++++++++++++++++++++++++++++++++++++++++++ | 86% ~23s
|++++++++++++++++++++++++++++++++++++++++++++ | 87% ~21s
|++++++++++++++++++++++++++++++++++++++++++++ | 88% ~19s
|+++++++++++++++++++++++++++++++++++++++++++++ | 89% ~18s
|+++++++++++++++++++++++++++++++++++++++++++++ | 90% ~16s
|++++++++++++++++++++++++++++++++++++++++++++++ | 91% ~15s
|++++++++++++++++++++++++++++++++++++++++++++++ | 92% ~13s
|+++++++++++++++++++++++++++++++++++++++++++++++ | 93% ~11s
|+++++++++++++++++++++++++++++++++++++++++++++++ | 94% ~10s
|++++++++++++++++++++++++++++++++++++++++++++++++ | 95% ~08s
|++++++++++++++++++++++++++++++++++++++++++++++++ | 96% ~06s
|+++++++++++++++++++++++++++++++++++++++++++++++++ | 97% ~05s
|+++++++++++++++++++++++++++++++++++++++++++++++++ | 98% ~03s
|++++++++++++++++++++++++++++++++++++++++++++++++++| 99% ~02s
|++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed = 02m 41s
print(x = head(x = cluster1.markers, n =5))
p_val avg_logFC pct.1 pct.2 p_val_adj
S100A8 0 2.965944 0.852 0.050 0
CCL2 0 2.926204 0.468 0.038 0
IL8 0 2.769285 0.880 0.091 0
S100A9 0 2.730468 0.762 0.043 0
FTL 0 2.405877 1.000 0.872 0
# cluster 1 vs cluster 4 and 5
cluster1.markers.5 <- FindMarkers(object = pbmc, ident.1 = 1, ident.2 = 5, min.pct = 0.25)
| | 0 % ~calculating
|+ | 1 % ~23s
|++ | 2 % ~21s
|++ | 3 % ~20s
|+++ | 5 % ~19s
|+++ | 6 % ~19s
|++++ | 7 % ~19s
|+++++ | 8 % ~18s
|+++++ | 9 % ~18s
|++++++ | 10% ~18s
|++++++ | 11% ~17s
|+++++++ | 13% ~17s
|+++++++ | 14% ~17s
|++++++++ | 15% ~16s
|+++++++++ | 16% ~16s
|+++++++++ | 17% ~16s
|++++++++++ | 18% ~16s
|++++++++++ | 20% ~15s
|+++++++++++ | 21% ~15s
|+++++++++++ | 22% ~15s
|++++++++++++ | 23% ~15s
|+++++++++++++ | 24% ~15s
|+++++++++++++ | 25% ~14s
|++++++++++++++ | 26% ~14s
|++++++++++++++ | 28% ~14s
|+++++++++++++++ | 29% ~14s
|+++++++++++++++ | 30% ~14s
|++++++++++++++++ | 31% ~14s
|+++++++++++++++++ | 32% ~13s
|+++++++++++++++++ | 33% ~13s
|++++++++++++++++++ | 34% ~13s
|++++++++++++++++++ | 36% ~13s
|+++++++++++++++++++ | 37% ~13s
|+++++++++++++++++++ | 38% ~13s
|++++++++++++++++++++ | 39% ~12s
|+++++++++++++++++++++ | 40% ~12s
|+++++++++++++++++++++ | 41% ~12s
|++++++++++++++++++++++ | 43% ~12s
|++++++++++++++++++++++ | 44% ~12s
|+++++++++++++++++++++++ | 45% ~11s
|+++++++++++++++++++++++ | 46% ~11s
|++++++++++++++++++++++++ | 47% ~11s
|+++++++++++++++++++++++++ | 48% ~11s
|+++++++++++++++++++++++++ | 49% ~10s
|++++++++++++++++++++++++++ | 51% ~10s
|++++++++++++++++++++++++++ | 52% ~10s
|+++++++++++++++++++++++++++ | 53% ~10s
|++++++++++++++++++++++++++++ | 54% ~10s
|++++++++++++++++++++++++++++ | 55% ~09s
|+++++++++++++++++++++++++++++ | 56% ~09s
|+++++++++++++++++++++++++++++ | 57% ~09s
|++++++++++++++++++++++++++++++ | 59% ~09s
|++++++++++++++++++++++++++++++ | 60% ~08s
|+++++++++++++++++++++++++++++++ | 61% ~08s
|++++++++++++++++++++++++++++++++ | 62% ~08s
|++++++++++++++++++++++++++++++++ | 63% ~08s
|+++++++++++++++++++++++++++++++++ | 64% ~07s
|+++++++++++++++++++++++++++++++++ | 66% ~07s
|++++++++++++++++++++++++++++++++++ | 67% ~07s
|++++++++++++++++++++++++++++++++++ | 68% ~07s
|+++++++++++++++++++++++++++++++++++ | 69% ~06s
|++++++++++++++++++++++++++++++++++++ | 70% ~06s
|++++++++++++++++++++++++++++++++++++ | 71% ~06s
|+++++++++++++++++++++++++++++++++++++ | 72% ~06s
|+++++++++++++++++++++++++++++++++++++ | 74% ~06s
|++++++++++++++++++++++++++++++++++++++ | 75% ~05s
|++++++++++++++++++++++++++++++++++++++ | 76% ~05s
|+++++++++++++++++++++++++++++++++++++++ | 77% ~05s
|++++++++++++++++++++++++++++++++++++++++ | 78% ~05s
|++++++++++++++++++++++++++++++++++++++++ | 79% ~04s
|+++++++++++++++++++++++++++++++++++++++++ | 80% ~04s
|+++++++++++++++++++++++++++++++++++++++++ | 82% ~04s
|++++++++++++++++++++++++++++++++++++++++++ | 83% ~04s
|++++++++++++++++++++++++++++++++++++++++++ | 84% ~03s
|+++++++++++++++++++++++++++++++++++++++++++ | 85% ~03s
|++++++++++++++++++++++++++++++++++++++++++++ | 86% ~03s
|++++++++++++++++++++++++++++++++++++++++++++ | 87% ~03s
|+++++++++++++++++++++++++++++++++++++++++++++ | 89% ~02s
|+++++++++++++++++++++++++++++++++++++++++++++ | 90% ~02s
|++++++++++++++++++++++++++++++++++++++++++++++ | 91% ~02s
|++++++++++++++++++++++++++++++++++++++++++++++ | 92% ~02s
|+++++++++++++++++++++++++++++++++++++++++++++++ | 93% ~01s
|++++++++++++++++++++++++++++++++++++++++++++++++ | 94% ~01s
|++++++++++++++++++++++++++++++++++++++++++++++++ | 95% ~01s
|+++++++++++++++++++++++++++++++++++++++++++++++++ | 97% ~01s
|+++++++++++++++++++++++++++++++++++++++++++++++++ | 98% ~00s
|++++++++++++++++++++++++++++++++++++++++++++++++++| 99% ~00s
|++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed = 21s
print(x = head(x = cluster1.markers.5, n =5))
p_val avg_logFC pct.1 pct.2 p_val_adj
VMO1 1.981317e-239 -2.590454 0.100 0.620 2.682109e-235
TNFSF10 4.458680e-222 -1.693412 0.023 0.434 6.035714e-218
FCGR3A 7.791344e-195 -1.641433 0.408 0.841 1.054714e-190
TNFSF13B 2.400820e-180 -1.271797 0.051 0.459 3.249990e-176
FAM26F 4.024863e-177 -1.594279 0.066 0.482 5.448457e-173
Differential gene expression - iterate through all clusters
# Find markers for every cluster compared to all remaining cells, report only positive ones
pbmc.markers <- FindAllMarkers(object = pbmc, only.pos = TRUE, min.pct = 0.25, thresh.use = 0.25)
| | 0 % ~calculating
|+ | 1 % ~02m 31s
|++ | 2 % ~01m 60s
|++ | 4 % ~01m 56s
|+++ | 5 % ~01m 56s
|+++ | 6 % ~01m 54s
|++++ | 7 % ~01m 55s
|+++++ | 8 % ~01m 56s
|+++++ | 9 % ~01m 53s
|++++++ | 11% ~01m 50s
|++++++ | 12% ~01m 47s
|+++++++ | 13% ~01m 48s
|++++++++ | 14% ~01m 45s
|++++++++ | 15% ~01m 43s
|+++++++++ | 16% ~01m 44s
|+++++++++ | 18% ~01m 47s
|++++++++++ | 19% ~01m 44s
|++++++++++ | 20% ~01m 42s
|+++++++++++ | 21% ~01m 39s
|++++++++++++ | 22% ~01m 37s
|++++++++++++ | 24% ~01m 34s
|+++++++++++++ | 25% ~01m 31s
|+++++++++++++ | 26% ~01m 29s
|++++++++++++++ | 27% ~01m 27s
|+++++++++++++++ | 28% ~01m 25s
|+++++++++++++++ | 29% ~01m 23s
|++++++++++++++++ | 31% ~01m 21s
|++++++++++++++++ | 32% ~01m 19s
|+++++++++++++++++ | 33% ~01m 17s
|++++++++++++++++++ | 34% ~01m 15s
|++++++++++++++++++ | 35% ~01m 13s
|+++++++++++++++++++ | 36% ~01m 12s
|+++++++++++++++++++ | 38% ~01m 10s
|++++++++++++++++++++ | 39% ~01m 08s
|++++++++++++++++++++ | 40% ~01m 07s
|+++++++++++++++++++++ | 41% ~01m 05s
|++++++++++++++++++++++ | 42% ~01m 04s
|++++++++++++++++++++++ | 44% ~01m 02s
|+++++++++++++++++++++++ | 45% ~01m 01s
|+++++++++++++++++++++++ | 46% ~59s
|++++++++++++++++++++++++ | 47% ~58s
|+++++++++++++++++++++++++ | 48% ~56s
|+++++++++++++++++++++++++ | 49% ~55s
|++++++++++++++++++++++++++ | 51% ~54s
|++++++++++++++++++++++++++ | 52% ~53s
|+++++++++++++++++++++++++++ | 53% ~51s
|++++++++++++++++++++++++++++ | 54% ~50s
|++++++++++++++++++++++++++++ | 55% ~48s
|+++++++++++++++++++++++++++++ | 56% ~47s
|+++++++++++++++++++++++++++++ | 58% ~46s
|++++++++++++++++++++++++++++++ | 59% ~44s
|++++++++++++++++++++++++++++++ | 60% ~43s
|+++++++++++++++++++++++++++++++ | 61% ~42s
|++++++++++++++++++++++++++++++++ | 62% ~40s
|++++++++++++++++++++++++++++++++ | 64% ~39s
|+++++++++++++++++++++++++++++++++ | 65% ~38s
|+++++++++++++++++++++++++++++++++ | 66% ~36s
|++++++++++++++++++++++++++++++++++ | 67% ~35s
|+++++++++++++++++++++++++++++++++++ | 68% ~34s
|+++++++++++++++++++++++++++++++++++ | 69% ~32s
|++++++++++++++++++++++++++++++++++++ | 71% ~31s
|++++++++++++++++++++++++++++++++++++ | 72% ~30s
|+++++++++++++++++++++++++++++++++++++ | 73% ~28s
|++++++++++++++++++++++++++++++++++++++ | 74% ~28s
|++++++++++++++++++++++++++++++++++++++ | 75% ~27s
|+++++++++++++++++++++++++++++++++++++++ | 76% ~25s
|+++++++++++++++++++++++++++++++++++++++ | 78% ~24s
|++++++++++++++++++++++++++++++++++++++++ | 79% ~23s
|++++++++++++++++++++++++++++++++++++++++ | 80% ~21s
|+++++++++++++++++++++++++++++++++++++++++ | 81% ~20s
|++++++++++++++++++++++++++++++++++++++++++ | 82% ~19s
|++++++++++++++++++++++++++++++++++++++++++ | 84% ~18s
|+++++++++++++++++++++++++++++++++++++++++++ | 85% ~16s
|+++++++++++++++++++++++++++++++++++++++++++ | 86% ~15s
|++++++++++++++++++++++++++++++++++++++++++++ | 87% ~14s
|+++++++++++++++++++++++++++++++++++++++++++++ | 88% ~12s
|+++++++++++++++++++++++++++++++++++++++++++++ | 89% ~11s
|++++++++++++++++++++++++++++++++++++++++++++++ | 91% ~10s
|++++++++++++++++++++++++++++++++++++++++++++++ | 92% ~09s
|+++++++++++++++++++++++++++++++++++++++++++++++ | 93% ~07s
|++++++++++++++++++++++++++++++++++++++++++++++++ | 94% ~06s
|++++++++++++++++++++++++++++++++++++++++++++++++ | 95% ~05s
|+++++++++++++++++++++++++++++++++++++++++++++++++ | 96% ~04s
|+++++++++++++++++++++++++++++++++++++++++++++++++ | 98% ~02s
|++++++++++++++++++++++++++++++++++++++++++++++++++| 99% ~01s
|++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed = 01m 44s
| | 0 % ~calculating
|+ | 1 % ~02m 38s
|+ | 2 % ~02m 46s
|++ | 3 % ~02m 37s
|++ | 4 % ~02m 29s
|+++ | 5 % ~02m 24s
|+++ | 6 % ~02m 21s
|++++ | 7 % ~02m 18s
|++++ | 8 % ~02m 14s
|+++++ | 9 % ~02m 12s
|+++++ | 10% ~02m 12s
|++++++ | 11% ~02m 10s
|++++++ | 12% ~02m 08s
|+++++++ | 13% ~02m 05s
|+++++++ | 14% ~02m 04s
|++++++++ | 15% ~02m 02s
|++++++++ | 16% ~02m 00s
|+++++++++ | 17% ~01m 59s
|+++++++++ | 18% ~01m 58s
|++++++++++ | 19% ~01m 57s
|++++++++++ | 20% ~01m 59s
|+++++++++++ | 21% ~01m 57s
|+++++++++++ | 22% ~01m 55s
|++++++++++++ | 23% ~01m 53s
|++++++++++++ | 24% ~01m 51s
|+++++++++++++ | 25% ~01m 50s
|+++++++++++++ | 26% ~01m 48s
|++++++++++++++ | 27% ~01m 46s
|++++++++++++++ | 28% ~01m 45s
|+++++++++++++++ | 29% ~01m 43s
|+++++++++++++++ | 30% ~01m 42s
|++++++++++++++++ | 31% ~01m 40s
|++++++++++++++++ | 32% ~01m 38s
|+++++++++++++++++ | 33% ~01m 37s
|+++++++++++++++++ | 34% ~01m 38s
|++++++++++++++++++ | 35% ~01m 36s
|++++++++++++++++++ | 36% ~01m 34s
|+++++++++++++++++++ | 37% ~01m 32s
|+++++++++++++++++++ | 38% ~01m 31s
|++++++++++++++++++++ | 39% ~01m 31s
|++++++++++++++++++++ | 40% ~01m 30s
|+++++++++++++++++++++ | 41% ~01m 28s
|+++++++++++++++++++++ | 42% ~01m 27s
|++++++++++++++++++++++ | 43% ~01m 25s
|++++++++++++++++++++++ | 44% ~01m 24s
|+++++++++++++++++++++++ | 45% ~01m 23s
|+++++++++++++++++++++++ | 46% ~01m 21s
|++++++++++++++++++++++++ | 47% ~01m 20s
|++++++++++++++++++++++++ | 48% ~01m 18s
|+++++++++++++++++++++++++ | 49% ~01m 21s
|+++++++++++++++++++++++++ | 50% ~01m 19s
|++++++++++++++++++++++++++ | 51% ~01m 17s
|++++++++++++++++++++++++++ | 52% ~01m 15s
|+++++++++++++++++++++++++++ | 53% ~01m 13s
|+++++++++++++++++++++++++++ | 54% ~01m 12s
|++++++++++++++++++++++++++++ | 55% ~01m 10s
|++++++++++++++++++++++++++++ | 56% ~01m 09s
|+++++++++++++++++++++++++++++ | 57% ~01m 07s
|+++++++++++++++++++++++++++++ | 58% ~01m 06s
|++++++++++++++++++++++++++++++ | 59% ~01m 04s
|++++++++++++++++++++++++++++++ | 60% ~01m 02s
|+++++++++++++++++++++++++++++++ | 61% ~01m 01s
|+++++++++++++++++++++++++++++++ | 62% ~59s
|++++++++++++++++++++++++++++++++ | 63% ~57s
|++++++++++++++++++++++++++++++++ | 64% ~56s
|+++++++++++++++++++++++++++++++++ | 65% ~54s
|+++++++++++++++++++++++++++++++++ | 66% ~52s
|++++++++++++++++++++++++++++++++++ | 67% ~51s
|++++++++++++++++++++++++++++++++++ | 68% ~49s
|+++++++++++++++++++++++++++++++++++ | 69% ~48s
|+++++++++++++++++++++++++++++++++++ | 70% ~46s
|++++++++++++++++++++++++++++++++++++ | 71% ~44s
|++++++++++++++++++++++++++++++++++++ | 72% ~43s
|+++++++++++++++++++++++++++++++++++++ | 73% ~41s
|+++++++++++++++++++++++++++++++++++++ | 74% ~40s
|++++++++++++++++++++++++++++++++++++++ | 75% ~39s
|++++++++++++++++++++++++++++++++++++++ | 76% ~37s
|+++++++++++++++++++++++++++++++++++++++ | 77% ~35s
|+++++++++++++++++++++++++++++++++++++++ | 78% ~34s
|++++++++++++++++++++++++++++++++++++++++ | 79% ~32s
|++++++++++++++++++++++++++++++++++++++++ | 80% ~31s
|+++++++++++++++++++++++++++++++++++++++++ | 81% ~29s
|+++++++++++++++++++++++++++++++++++++++++ | 82% ~28s
|++++++++++++++++++++++++++++++++++++++++++ | 83% ~26s
|++++++++++++++++++++++++++++++++++++++++++ | 84% ~24s
|+++++++++++++++++++++++++++++++++++++++++++ | 85% ~23s
|+++++++++++++++++++++++++++++++++++++++++++ | 86% ~21s
|++++++++++++++++++++++++++++++++++++++++++++ | 87% ~20s
|++++++++++++++++++++++++++++++++++++++++++++ | 88% ~18s
|+++++++++++++++++++++++++++++++++++++++++++++ | 89% ~17s
|+++++++++++++++++++++++++++++++++++++++++++++ | 90% ~15s
|++++++++++++++++++++++++++++++++++++++++++++++ | 91% ~14s
|++++++++++++++++++++++++++++++++++++++++++++++ | 92% ~12s
|+++++++++++++++++++++++++++++++++++++++++++++++ | 93% ~11s
|+++++++++++++++++++++++++++++++++++++++++++++++ | 94% ~09s
|++++++++++++++++++++++++++++++++++++++++++++++++ | 95% ~08s
|++++++++++++++++++++++++++++++++++++++++++++++++ | 96% ~06s
|+++++++++++++++++++++++++++++++++++++++++++++++++ | 97% ~05s
|+++++++++++++++++++++++++++++++++++++++++++++++++ | 98% ~03s
|++++++++++++++++++++++++++++++++++++++++++++++++++| 99% ~02s
|++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed = 02m 32s
| | 0 % ~calculating
|+ | 1 % ~01m 58s
|++ | 2 % ~01m 36s
|++ | 4 % ~01m 22s
|+++ | 5 % ~01m 12s
|++++ | 6 % ~01m 05s
|++++ | 7 % ~60s
|+++++ | 9 % ~57s
|+++++ | 10% ~54s
|++++++ | 11% ~53s
|+++++++ | 12% ~51s
|+++++++ | 14% ~49s
|++++++++ | 15% ~51s
|+++++++++ | 16% ~49s
|+++++++++ | 17% ~48s
|++++++++++ | 19% ~47s
|++++++++++ | 20% ~46s
|+++++++++++ | 21% ~45s
|++++++++++++ | 22% ~46s
|++++++++++++ | 23% ~45s
|+++++++++++++ | 25% ~48s
|+++++++++++++ | 26% ~48s
|++++++++++++++ | 27% ~48s
|+++++++++++++++ | 28% ~47s
|+++++++++++++++ | 30% ~45s
|++++++++++++++++ | 31% ~44s
|+++++++++++++++++ | 32% ~43s
|+++++++++++++++++ | 33% ~42s
|++++++++++++++++++ | 35% ~40s
|++++++++++++++++++ | 36% ~39s
|+++++++++++++++++++ | 37% ~38s
|++++++++++++++++++++ | 38% ~39s
|++++++++++++++++++++ | 40% ~37s
|+++++++++++++++++++++ | 41% ~36s
|+++++++++++++++++++++ | 42% ~36s
|++++++++++++++++++++++ | 43% ~35s
|+++++++++++++++++++++++ | 44% ~34s
|+++++++++++++++++++++++ | 46% ~33s
|++++++++++++++++++++++++ | 47% ~32s
|+++++++++++++++++++++++++ | 48% ~31s
|+++++++++++++++++++++++++ | 49% ~30s
|++++++++++++++++++++++++++ | 51% ~29s
|++++++++++++++++++++++++++ | 52% ~28s
|+++++++++++++++++++++++++++ | 53% ~27s
|++++++++++++++++++++++++++++ | 54% ~26s
|++++++++++++++++++++++++++++ | 56% ~25s
|+++++++++++++++++++++++++++++ | 57% ~24s
|++++++++++++++++++++++++++++++ | 58% ~24s
|++++++++++++++++++++++++++++++ | 59% ~23s
|+++++++++++++++++++++++++++++++ | 60% ~22s
|+++++++++++++++++++++++++++++++ | 62% ~21s
|++++++++++++++++++++++++++++++++ | 63% ~20s
|+++++++++++++++++++++++++++++++++ | 64% ~20s
|+++++++++++++++++++++++++++++++++ | 65% ~19s
|++++++++++++++++++++++++++++++++++ | 67% ~18s
|++++++++++++++++++++++++++++++++++ | 68% ~17s
|+++++++++++++++++++++++++++++++++++ | 69% ~17s
|++++++++++++++++++++++++++++++++++++ | 70% ~16s
|++++++++++++++++++++++++++++++++++++ | 72% ~15s
|+++++++++++++++++++++++++++++++++++++ | 73% ~15s
|++++++++++++++++++++++++++++++++++++++ | 74% ~14s
|++++++++++++++++++++++++++++++++++++++ | 75% ~13s
|+++++++++++++++++++++++++++++++++++++++ | 77% ~12s
|+++++++++++++++++++++++++++++++++++++++ | 78% ~12s
|++++++++++++++++++++++++++++++++++++++++ | 79% ~11s
|+++++++++++++++++++++++++++++++++++++++++ | 80% ~10s
|+++++++++++++++++++++++++++++++++++++++++ | 81% ~10s
|++++++++++++++++++++++++++++++++++++++++++ | 83% ~09s
|++++++++++++++++++++++++++++++++++++++++++ | 84% ~08s
|+++++++++++++++++++++++++++++++++++++++++++ | 85% ~08s
|++++++++++++++++++++++++++++++++++++++++++++ | 86% ~07s
|++++++++++++++++++++++++++++++++++++++++++++ | 88% ~06s
|+++++++++++++++++++++++++++++++++++++++++++++ | 89% ~06s
|++++++++++++++++++++++++++++++++++++++++++++++ | 90% ~05s
|++++++++++++++++++++++++++++++++++++++++++++++ | 91% ~04s
|+++++++++++++++++++++++++++++++++++++++++++++++ | 93% ~04s
|+++++++++++++++++++++++++++++++++++++++++++++++ | 94% ~03s
|++++++++++++++++++++++++++++++++++++++++++++++++ | 95% ~03s
|+++++++++++++++++++++++++++++++++++++++++++++++++ | 96% ~02s
|+++++++++++++++++++++++++++++++++++++++++++++++++ | 98% ~01s
|++++++++++++++++++++++++++++++++++++++++++++++++++| 99% ~01s
|++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed = 52s
| | 0 % ~calculating
|+ | 1 % ~02m 21s
|++ | 3 % ~02m 38s
|+++ | 4 % ~02m 02s
|+++ | 6 % ~01m 43s
|++++ | 7 % ~01m 33s
|+++++ | 8 % ~01m 29s
|+++++ | 10% ~01m 25s
|++++++ | 11% ~01m 21s
|+++++++ | 12% ~01m 16s
|+++++++ | 14% ~01m 13s
|++++++++ | 15% ~01m 10s
|+++++++++ | 17% ~01m 07s
|++++++++++ | 18% ~01m 04s
|++++++++++ | 19% ~01m 02s
|+++++++++++ | 21% ~60s
|++++++++++++ | 22% ~58s
|++++++++++++ | 24% ~56s
|+++++++++++++ | 25% ~54s
|++++++++++++++ | 26% ~53s
|++++++++++++++ | 28% ~52s
|+++++++++++++++ | 29% ~51s
|++++++++++++++++ | 31% ~49s
|++++++++++++++++ | 32% ~48s
|+++++++++++++++++ | 33% ~47s
|++++++++++++++++++ | 35% ~47s
|+++++++++++++++++++ | 36% ~46s
|+++++++++++++++++++ | 38% ~45s
|++++++++++++++++++++ | 39% ~45s
|+++++++++++++++++++++ | 40% ~43s
|+++++++++++++++++++++ | 42% ~42s
|++++++++++++++++++++++ | 43% ~41s
|+++++++++++++++++++++++ | 44% ~40s
|+++++++++++++++++++++++ | 46% ~39s
|++++++++++++++++++++++++ | 47% ~38s
|+++++++++++++++++++++++++ | 49% ~38s
|+++++++++++++++++++++++++ | 50% ~37s
|++++++++++++++++++++++++++ | 51% ~36s
|+++++++++++++++++++++++++++ | 53% ~35s
|++++++++++++++++++++++++++++ | 54% ~34s
|++++++++++++++++++++++++++++ | 56% ~33s
|+++++++++++++++++++++++++++++ | 57% ~32s
|++++++++++++++++++++++++++++++ | 58% ~31s
|++++++++++++++++++++++++++++++ | 60% ~30s
|+++++++++++++++++++++++++++++++ | 61% ~29s
|++++++++++++++++++++++++++++++++ | 62% ~28s
|++++++++++++++++++++++++++++++++ | 64% ~27s
|+++++++++++++++++++++++++++++++++ | 65% ~26s
|++++++++++++++++++++++++++++++++++ | 67% ~25s
|+++++++++++++++++++++++++++++++++++ | 68% ~24s
|+++++++++++++++++++++++++++++++++++ | 69% ~23s
|++++++++++++++++++++++++++++++++++++ | 71% ~22s
|+++++++++++++++++++++++++++++++++++++ | 72% ~21s
|+++++++++++++++++++++++++++++++++++++ | 74% ~20s
|++++++++++++++++++++++++++++++++++++++ | 75% ~19s
|+++++++++++++++++++++++++++++++++++++++ | 76% ~18s
|+++++++++++++++++++++++++++++++++++++++ | 78% ~18s
|++++++++++++++++++++++++++++++++++++++++ | 79% ~17s
|+++++++++++++++++++++++++++++++++++++++++ | 81% ~16s
|+++++++++++++++++++++++++++++++++++++++++ | 82% ~14s
|++++++++++++++++++++++++++++++++++++++++++ | 83% ~13s
|+++++++++++++++++++++++++++++++++++++++++++ | 85% ~12s
|++++++++++++++++++++++++++++++++++++++++++++ | 86% ~11s
|++++++++++++++++++++++++++++++++++++++++++++ | 88% ~10s
|+++++++++++++++++++++++++++++++++++++++++++++ | 89% ~09s
|++++++++++++++++++++++++++++++++++++++++++++++ | 90% ~07s
|++++++++++++++++++++++++++++++++++++++++++++++ | 92% ~06s
|+++++++++++++++++++++++++++++++++++++++++++++++ | 93% ~05s
|++++++++++++++++++++++++++++++++++++++++++++++++ | 94% ~04s
|++++++++++++++++++++++++++++++++++++++++++++++++ | 96% ~03s
|+++++++++++++++++++++++++++++++++++++++++++++++++ | 97% ~02s
|++++++++++++++++++++++++++++++++++++++++++++++++++| 99% ~01s
|++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed = 01m 15s
| | 0 % ~calculating
|+ | 1 % ~02m 11s
|++ | 2 % ~01m 42s
|++ | 4 % ~01m 31s
|+++ | 5 % ~01m 25s
|+++ | 6 % ~01m 21s
|++++ | 7 % ~01m 17s
|+++++ | 8 % ~01m 14s
|+++++ | 10% ~01m 11s
|++++++ | 11% ~01m 09s
|++++++ | 12% ~01m 07s
|+++++++ | 13% ~01m 06s
|++++++++ | 14% ~01m 04s
|++++++++ | 15% ~01m 02s
|+++++++++ | 17% ~01m 01s
|+++++++++ | 18% ~01m 03s
|++++++++++ | 19% ~01m 02s
|+++++++++++ | 20% ~01m 00s
|+++++++++++ | 21% ~59s
|++++++++++++ | 23% ~57s
|++++++++++++ | 24% ~56s
|+++++++++++++ | 25% ~54s
|++++++++++++++ | 26% ~53s
|++++++++++++++ | 27% ~52s
|+++++++++++++++ | 29% ~51s
|+++++++++++++++ | 30% ~51s
|++++++++++++++++ | 31% ~50s
|+++++++++++++++++ | 32% ~49s
|+++++++++++++++++ | 33% ~48s
|++++++++++++++++++ | 35% ~48s
|++++++++++++++++++ | 36% ~47s
|+++++++++++++++++++ | 37% ~47s
|++++++++++++++++++++ | 38% ~47s
|++++++++++++++++++++ | 39% ~46s
|+++++++++++++++++++++ | 40% ~45s
|+++++++++++++++++++++ | 42% ~44s
|++++++++++++++++++++++ | 43% ~43s
|+++++++++++++++++++++++ | 44% ~42s
|+++++++++++++++++++++++ | 45% ~41s
|++++++++++++++++++++++++ | 46% ~40s
|++++++++++++++++++++++++ | 48% ~40s
|+++++++++++++++++++++++++ | 49% ~39s
|+++++++++++++++++++++++++ | 50% ~38s
|++++++++++++++++++++++++++ | 51% ~37s
|+++++++++++++++++++++++++++ | 52% ~36s
|+++++++++++++++++++++++++++ | 54% ~35s
|++++++++++++++++++++++++++++ | 55% ~34s
|++++++++++++++++++++++++++++ | 56% ~33s
|+++++++++++++++++++++++++++++ | 57% ~32s
|++++++++++++++++++++++++++++++ | 58% ~31s
|++++++++++++++++++++++++++++++ | 60% ~30s
|+++++++++++++++++++++++++++++++ | 61% ~29s
|+++++++++++++++++++++++++++++++ | 62% ~28s
|++++++++++++++++++++++++++++++++ | 63% ~27s
|+++++++++++++++++++++++++++++++++ | 64% ~27s
|+++++++++++++++++++++++++++++++++ | 65% ~27s
|++++++++++++++++++++++++++++++++++ | 67% ~26s
|++++++++++++++++++++++++++++++++++ | 68% ~26s
|+++++++++++++++++++++++++++++++++++ | 69% ~24s
|++++++++++++++++++++++++++++++++++++ | 70% ~23s
|++++++++++++++++++++++++++++++++++++ | 71% ~22s
|+++++++++++++++++++++++++++++++++++++ | 73% ~21s
|+++++++++++++++++++++++++++++++++++++ | 74% ~21s
|++++++++++++++++++++++++++++++++++++++ | 75% ~20s
|+++++++++++++++++++++++++++++++++++++++ | 76% ~19s
|+++++++++++++++++++++++++++++++++++++++ | 77% ~18s
|++++++++++++++++++++++++++++++++++++++++ | 79% ~17s
|++++++++++++++++++++++++++++++++++++++++ | 80% ~16s
|+++++++++++++++++++++++++++++++++++++++++ | 81% ~15s
|++++++++++++++++++++++++++++++++++++++++++ | 82% ~14s
|++++++++++++++++++++++++++++++++++++++++++ | 83% ~13s
|+++++++++++++++++++++++++++++++++++++++++++ | 85% ~12s
|+++++++++++++++++++++++++++++++++++++++++++ | 86% ~11s
|++++++++++++++++++++++++++++++++++++++++++++ | 87% ~10s
|+++++++++++++++++++++++++++++++++++++++++++++ | 88% ~09s
|+++++++++++++++++++++++++++++++++++++++++++++ | 89% ~08s
|++++++++++++++++++++++++++++++++++++++++++++++ | 90% ~07s
|++++++++++++++++++++++++++++++++++++++++++++++ | 92% ~06s
|+++++++++++++++++++++++++++++++++++++++++++++++ | 93% ~05s
|++++++++++++++++++++++++++++++++++++++++++++++++ | 94% ~05s
|++++++++++++++++++++++++++++++++++++++++++++++++ | 95% ~04s
|+++++++++++++++++++++++++++++++++++++++++++++++++ | 96% ~03s
|+++++++++++++++++++++++++++++++++++++++++++++++++ | 98% ~02s
|++++++++++++++++++++++++++++++++++++++++++++++++++| 99% ~01s
|++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed = 01m 17s
| | 0 % ~calculating
|+ | 1 % ~03m 44s
|++ | 2 % ~03m 06s
|++ | 3 % ~02m 50s
|+++ | 4 % ~02m 43s
|+++ | 5 % ~02m 34s
|++++ | 6 % ~02m 30s
|++++ | 7 % ~02m 28s
|+++++ | 8 % ~02m 24s
|+++++ | 9 % ~02m 20s
|++++++ | 10% ~02m 18s
|++++++ | 11% ~02m 17s
|+++++++ | 12% ~02m 16s
|+++++++ | 13% ~02m 21s
|++++++++ | 14% ~02m 21s
|++++++++ | 15% ~02m 20s
|+++++++++ | 16% ~02m 22s
|+++++++++ | 17% ~02m 19s
|++++++++++ | 18% ~02m 15s
|++++++++++ | 19% ~02m 12s
|+++++++++++ | 20% ~02m 09s
|+++++++++++ | 21% ~02m 07s
|++++++++++++ | 22% ~02m 05s
|++++++++++++ | 23% ~02m 02s
|+++++++++++++ | 24% ~02m 00s
|+++++++++++++ | 25% ~01m 58s
|++++++++++++++ | 26% ~01m 57s
|++++++++++++++ | 27% ~01m 58s
|+++++++++++++++ | 28% ~01m 56s
|+++++++++++++++ | 29% ~01m 53s
|++++++++++++++++ | 30% ~01m 51s
|++++++++++++++++ | 31% ~01m 49s
|+++++++++++++++++ | 32% ~01m 47s
|+++++++++++++++++ | 33% ~01m 45s
|++++++++++++++++++ | 34% ~01m 43s
|++++++++++++++++++ | 35% ~01m 42s
|+++++++++++++++++++ | 36% ~01m 40s
|+++++++++++++++++++ | 37% ~01m 50s
|++++++++++++++++++++ | 38% ~01m 48s
|++++++++++++++++++++ | 39% ~01m 45s
|+++++++++++++++++++++ | 40% ~01m 43s
|+++++++++++++++++++++ | 41% ~01m 40s
|++++++++++++++++++++++ | 42% ~01m 38s
|++++++++++++++++++++++ | 43% ~01m 35s
|+++++++++++++++++++++++ | 44% ~01m 33s
|+++++++++++++++++++++++ | 45% ~01m 31s
|++++++++++++++++++++++++ | 46% ~01m 29s
|++++++++++++++++++++++++ | 47% ~01m 27s
|+++++++++++++++++++++++++ | 48% ~01m 25s
|+++++++++++++++++++++++++ | 49% ~01m 23s
|++++++++++++++++++++++++++ | 51% ~01m 21s
|++++++++++++++++++++++++++ | 52% ~01m 19s
|+++++++++++++++++++++++++++ | 53% ~01m 17s
|+++++++++++++++++++++++++++ | 54% ~01m 15s
|++++++++++++++++++++++++++++ | 55% ~01m 13s
|++++++++++++++++++++++++++++ | 56% ~01m 12s
|+++++++++++++++++++++++++++++ | 57% ~01m 10s
|+++++++++++++++++++++++++++++ | 58% ~01m 08s
|++++++++++++++++++++++++++++++ | 59% ~01m 06s
|++++++++++++++++++++++++++++++ | 60% ~01m 04s
|+++++++++++++++++++++++++++++++ | 61% ~01m 03s
|+++++++++++++++++++++++++++++++ | 62% ~01m 01s
|++++++++++++++++++++++++++++++++ | 63% ~60s
|++++++++++++++++++++++++++++++++ | 64% ~59s
|+++++++++++++++++++++++++++++++++ | 65% ~57s
|+++++++++++++++++++++++++++++++++ | 66% ~55s
|++++++++++++++++++++++++++++++++++ | 67% ~54s
|++++++++++++++++++++++++++++++++++ | 68% ~52s
|+++++++++++++++++++++++++++++++++++ | 69% ~50s
|+++++++++++++++++++++++++++++++++++ | 70% ~48s
|++++++++++++++++++++++++++++++++++++ | 71% ~47s
|++++++++++++++++++++++++++++++++++++ | 72% ~45s
|+++++++++++++++++++++++++++++++++++++ | 73% ~43s
|+++++++++++++++++++++++++++++++++++++ | 74% ~41s
|++++++++++++++++++++++++++++++++++++++ | 75% ~40s
|++++++++++++++++++++++++++++++++++++++ | 76% ~38s
|+++++++++++++++++++++++++++++++++++++++ | 77% ~37s
|+++++++++++++++++++++++++++++++++++++++ | 78% ~35s
|++++++++++++++++++++++++++++++++++++++++ | 79% ~34s
|++++++++++++++++++++++++++++++++++++++++ | 80% ~32s
|+++++++++++++++++++++++++++++++++++++++++ | 81% ~30s
|+++++++++++++++++++++++++++++++++++++++++ | 82% ~29s
|++++++++++++++++++++++++++++++++++++++++++ | 83% ~27s
|++++++++++++++++++++++++++++++++++++++++++ | 84% ~25s
|+++++++++++++++++++++++++++++++++++++++++++ | 85% ~24s
|+++++++++++++++++++++++++++++++++++++++++++ | 86% ~22s
|++++++++++++++++++++++++++++++++++++++++++++ | 87% ~21s
|++++++++++++++++++++++++++++++++++++++++++++ | 88% ~19s
|+++++++++++++++++++++++++++++++++++++++++++++ | 89% ~18s
|+++++++++++++++++++++++++++++++++++++++++++++ | 90% ~16s
|++++++++++++++++++++++++++++++++++++++++++++++ | 91% ~14s
|++++++++++++++++++++++++++++++++++++++++++++++ | 92% ~13s
|+++++++++++++++++++++++++++++++++++++++++++++++ | 93% ~11s
|+++++++++++++++++++++++++++++++++++++++++++++++ | 94% ~09s
|++++++++++++++++++++++++++++++++++++++++++++++++ | 95% ~08s
|++++++++++++++++++++++++++++++++++++++++++++++++ | 96% ~06s
|+++++++++++++++++++++++++++++++++++++++++++++++++ | 97% ~05s
|+++++++++++++++++++++++++++++++++++++++++++++++++ | 98% ~03s
|++++++++++++++++++++++++++++++++++++++++++++++++++| 99% ~02s
|++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed = 02m 39s
| | 0 % ~calculating
|+ | 1 % ~03m 15s
|++ | 2 % ~03m 14s
|++ | 3 % ~03m 15s
|+++ | 4 % ~02m 57s
|+++ | 5 % ~02m 45s
|++++ | 6 % ~02m 37s
|++++ | 7 % ~02m 31s
|+++++ | 9 % ~02m 26s
|+++++ | 10% ~02m 21s
|++++++ | 11% ~02m 18s
|++++++ | 12% ~02m 16s
|+++++++ | 13% ~02m 15s
|+++++++ | 14% ~02m 12s
|++++++++ | 15% ~02m 10s
|++++++++ | 16% ~02m 08s
|+++++++++ | 17% ~02m 07s
|++++++++++ | 18% ~02m 06s
|++++++++++ | 19% ~02m 04s
|+++++++++++ | 20% ~02m 03s
|+++++++++++ | 21% ~02m 00s
|++++++++++++ | 22% ~02m 01s
|++++++++++++ | 23% ~01m 59s
|+++++++++++++ | 24% ~02m 01s
|+++++++++++++ | 26% ~01m 58s
|++++++++++++++ | 27% ~01m 56s
|++++++++++++++ | 28% ~01m 53s
|+++++++++++++++ | 29% ~01m 51s
|+++++++++++++++ | 30% ~01m 48s
|++++++++++++++++ | 31% ~01m 46s
|++++++++++++++++ | 32% ~01m 44s
|+++++++++++++++++ | 33% ~01m 42s
|++++++++++++++++++ | 34% ~01m 39s
|++++++++++++++++++ | 35% ~01m 38s
|+++++++++++++++++++ | 36% ~01m 36s
|+++++++++++++++++++ | 37% ~01m 34s
|++++++++++++++++++++ | 38% ~01m 32s
|++++++++++++++++++++ | 39% ~01m 30s
|+++++++++++++++++++++ | 40% ~01m 28s
|+++++++++++++++++++++ | 41% ~01m 28s
|++++++++++++++++++++++ | 43% ~01m 26s
|++++++++++++++++++++++ | 44% ~01m 24s
|+++++++++++++++++++++++ | 45% ~01m 22s
|+++++++++++++++++++++++ | 46% ~01m 20s
|++++++++++++++++++++++++ | 47% ~01m 19s
|++++++++++++++++++++++++ | 48% ~01m 17s
|+++++++++++++++++++++++++ | 49% ~01m 16s
|+++++++++++++++++++++++++ | 50% ~01m 16s
|++++++++++++++++++++++++++ | 51% ~01m 15s
|+++++++++++++++++++++++++++ | 52% ~01m 13s
|+++++++++++++++++++++++++++ | 53% ~01m 16s
|++++++++++++++++++++++++++++ | 54% ~01m 16s
|++++++++++++++++++++++++++++ | 55% ~01m 15s
|+++++++++++++++++++++++++++++ | 56% ~01m 14s
|+++++++++++++++++++++++++++++ | 57% ~01m 12s
|++++++++++++++++++++++++++++++ | 59% ~01m 11s
|++++++++++++++++++++++++++++++ | 60% ~01m 10s
|+++++++++++++++++++++++++++++++ | 61% ~01m 16s
|+++++++++++++++++++++++++++++++ | 62% ~01m 14s
|++++++++++++++++++++++++++++++++ | 63% ~01m 11s
|++++++++++++++++++++++++++++++++ | 64% ~01m 09s
|+++++++++++++++++++++++++++++++++ | 65% ~01m 07s
|+++++++++++++++++++++++++++++++++ | 66% ~01m 05s
|++++++++++++++++++++++++++++++++++ | 67% ~01m 03s
|+++++++++++++++++++++++++++++++++++ | 68% ~01m 01s
|+++++++++++++++++++++++++++++++++++ | 69% ~59s
|++++++++++++++++++++++++++++++++++++ | 70% ~57s
|++++++++++++++++++++++++++++++++++++ | 71% ~55s
|+++++++++++++++++++++++++++++++++++++ | 72% ~53s
|+++++++++++++++++++++++++++++++++++++ | 73% ~51s
|++++++++++++++++++++++++++++++++++++++ | 74% ~49s
|++++++++++++++++++++++++++++++++++++++ | 76% ~47s
|+++++++++++++++++++++++++++++++++++++++ | 77% ~45s
|+++++++++++++++++++++++++++++++++++++++ | 78% ~43s
|++++++++++++++++++++++++++++++++++++++++ | 79% ~41s
|++++++++++++++++++++++++++++++++++++++++ | 80% ~39s
|+++++++++++++++++++++++++++++++++++++++++ | 81% ~37s
|+++++++++++++++++++++++++++++++++++++++++ | 82% ~35s
|++++++++++++++++++++++++++++++++++++++++++ | 83% ~33s
|+++++++++++++++++++++++++++++++++++++++++++ | 84% ~31s
|+++++++++++++++++++++++++++++++++++++++++++ | 85% ~29s
|++++++++++++++++++++++++++++++++++++++++++++ | 86% ~27s
|++++++++++++++++++++++++++++++++++++++++++++ | 87% ~25s
|+++++++++++++++++++++++++++++++++++++++++++++ | 88% ~23s
|+++++++++++++++++++++++++++++++++++++++++++++ | 89% ~20s
|++++++++++++++++++++++++++++++++++++++++++++++ | 90% ~18s
|++++++++++++++++++++++++++++++++++++++++++++++ | 91% ~16s
|+++++++++++++++++++++++++++++++++++++++++++++++ | 93% ~14s
|+++++++++++++++++++++++++++++++++++++++++++++++ | 94% ~12s
|++++++++++++++++++++++++++++++++++++++++++++++++ | 95% ~10s
|++++++++++++++++++++++++++++++++++++++++++++++++ | 96% ~08s
|+++++++++++++++++++++++++++++++++++++++++++++++++ | 97% ~06s
|+++++++++++++++++++++++++++++++++++++++++++++++++ | 98% ~04s
|++++++++++++++++++++++++++++++++++++++++++++++++++| 99% ~02s
|++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed = 03m 12s
| | 0 % ~calculating
|+ | 1 % ~22s
|++ | 3 % ~20s
|++ | 4 % ~19s
|+++ | 5 % ~19s
|++++ | 6 % ~20s
|++++ | 8 % ~21s
|+++++ | 9 % ~21s
|++++++ | 10% ~01m 11s
|++++++ | 12% ~01m 05s
|+++++++ | 13% ~60s
|++++++++ | 14% ~55s
|++++++++ | 16% ~51s
|+++++++++ | 17% ~48s
|++++++++++ | 18% ~44s
|++++++++++ | 19% ~42s
|+++++++++++ | 21% ~39s
|++++++++++++ | 22% ~37s
|++++++++++++ | 23% ~36s
|+++++++++++++ | 25% ~35s
|+++++++++++++ | 26% ~33s
|++++++++++++++ | 27% ~32s
|+++++++++++++++ | 29% ~31s
|+++++++++++++++ | 30% ~30s
|++++++++++++++++ | 31% ~29s
|+++++++++++++++++ | 32% ~29s
|+++++++++++++++++ | 34% ~28s
|++++++++++++++++++ | 35% ~27s
|+++++++++++++++++++ | 36% ~26s
|+++++++++++++++++++ | 38% ~25s
|++++++++++++++++++++ | 39% ~25s
|+++++++++++++++++++++ | 40% ~24s
|+++++++++++++++++++++ | 42% ~24s
|++++++++++++++++++++++ | 43% ~24s
|+++++++++++++++++++++++ | 44% ~23s
|+++++++++++++++++++++++ | 45% ~23s
|++++++++++++++++++++++++ | 47% ~22s
|+++++++++++++++++++++++++ | 48% ~22s
|+++++++++++++++++++++++++ | 49% ~22s
|++++++++++++++++++++++++++ | 51% ~21s
|++++++++++++++++++++++++++ | 52% ~20s
|+++++++++++++++++++++++++++ | 53% ~20s
|++++++++++++++++++++++++++++ | 55% ~19s
|++++++++++++++++++++++++++++ | 56% ~19s
|+++++++++++++++++++++++++++++ | 57% ~18s
|++++++++++++++++++++++++++++++ | 58% ~17s
|++++++++++++++++++++++++++++++ | 60% ~17s
|+++++++++++++++++++++++++++++++ | 61% ~16s
|++++++++++++++++++++++++++++++++ | 62% ~15s
|++++++++++++++++++++++++++++++++ | 64% ~15s
|+++++++++++++++++++++++++++++++++ | 65% ~14s
|++++++++++++++++++++++++++++++++++ | 66% ~14s
|++++++++++++++++++++++++++++++++++ | 68% ~13s
|+++++++++++++++++++++++++++++++++++ | 69% ~12s
|++++++++++++++++++++++++++++++++++++ | 70% ~12s
|++++++++++++++++++++++++++++++++++++ | 71% ~12s
|+++++++++++++++++++++++++++++++++++++ | 73% ~11s
|++++++++++++++++++++++++++++++++++++++ | 74% ~10s
|++++++++++++++++++++++++++++++++++++++ | 75% ~10s
|+++++++++++++++++++++++++++++++++++++++ | 77% ~10s
|+++++++++++++++++++++++++++++++++++++++ | 78% ~09s
|++++++++++++++++++++++++++++++++++++++++ | 79% ~08s
|+++++++++++++++++++++++++++++++++++++++++ | 81% ~08s
|+++++++++++++++++++++++++++++++++++++++++ | 82% ~07s
|++++++++++++++++++++++++++++++++++++++++++ | 83% ~07s
|+++++++++++++++++++++++++++++++++++++++++++ | 84% ~07s
|+++++++++++++++++++++++++++++++++++++++++++ | 86% ~06s
|++++++++++++++++++++++++++++++++++++++++++++ | 87% ~05s
|+++++++++++++++++++++++++++++++++++++++++++++ | 88% ~05s
|+++++++++++++++++++++++++++++++++++++++++++++ | 90% ~04s
|++++++++++++++++++++++++++++++++++++++++++++++ | 91% ~04s
|+++++++++++++++++++++++++++++++++++++++++++++++ | 92% ~03s
|+++++++++++++++++++++++++++++++++++++++++++++++ | 94% ~03s
|++++++++++++++++++++++++++++++++++++++++++++++++ | 95% ~02s
|+++++++++++++++++++++++++++++++++++++++++++++++++ | 96% ~02s
|+++++++++++++++++++++++++++++++++++++++++++++++++ | 97% ~01s
|++++++++++++++++++++++++++++++++++++++++++++++++++| 99% ~01s
|++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed = 41s
| | 0 % ~calculating
|+ | 1 % ~06m 27s
|++ | 2 % ~04m 57s
|++ | 3 % ~04m 28s
|+++ | 4 % ~04m 31s
|+++ | 5 % ~04m 08s
|++++ | 6 % ~04m 00s
|++++ | 7 % ~03m 56s
|+++++ | 8 % ~03m 43s
|+++++ | 9 % ~03m 31s
|++++++ | 10% ~03m 22s
|++++++ | 11% ~03m 16s
|+++++++ | 12% ~03m 15s
|+++++++ | 13% ~03m 11s
|++++++++ | 14% ~03m 07s
|++++++++ | 15% ~03m 04s
|+++++++++ | 16% ~03m 00s
|+++++++++ | 18% ~03m 02s
|++++++++++ | 19% ~03m 02s
|++++++++++ | 20% ~02m 58s
|+++++++++++ | 21% ~02m 59s
|+++++++++++ | 22% ~03m 02s
|++++++++++++ | 23% ~03m 01s
|++++++++++++ | 24% ~02m 55s
|+++++++++++++ | 25% ~02m 50s
|+++++++++++++ | 26% ~02m 46s
|++++++++++++++ | 27% ~02m 44s
|++++++++++++++ | 28% ~02m 43s
|+++++++++++++++ | 29% ~02m 39s
|+++++++++++++++ | 30% ~02m 46s
|++++++++++++++++ | 31% ~02m 43s
|++++++++++++++++ | 32% ~02m 43s
|+++++++++++++++++ | 33% ~02m 49s
|++++++++++++++++++ | 34% ~02m 44s
|++++++++++++++++++ | 35% ~02m 39s
|+++++++++++++++++++ | 36% ~02m 34s
|+++++++++++++++++++ | 37% ~02m 30s
|++++++++++++++++++++ | 38% ~02m 25s
|++++++++++++++++++++ | 39% ~02m 21s
|+++++++++++++++++++++ | 40% ~02m 17s
|+++++++++++++++++++++ | 41% ~02m 13s
|++++++++++++++++++++++ | 42% ~02m 11s
|++++++++++++++++++++++ | 43% ~02m 12s
|+++++++++++++++++++++++ | 44% ~02m 15s
|+++++++++++++++++++++++ | 45% ~02m 11s
|++++++++++++++++++++++++ | 46% ~02m 07s
|++++++++++++++++++++++++ | 47% ~02m 03s
|+++++++++++++++++++++++++ | 48% ~01m 59s
|+++++++++++++++++++++++++ | 49% ~01m 56s
|++++++++++++++++++++++++++ | 51% ~01m 53s
|++++++++++++++++++++++++++ | 52% ~01m 49s
|+++++++++++++++++++++++++++ | 53% ~01m 46s
|+++++++++++++++++++++++++++ | 54% ~01m 43s
|++++++++++++++++++++++++++++ | 55% ~01m 42s
|++++++++++++++++++++++++++++ | 56% ~01m 39s
|+++++++++++++++++++++++++++++ | 57% ~01m 37s
|+++++++++++++++++++++++++++++ | 58% ~01m 34s
|++++++++++++++++++++++++++++++ | 59% ~01m 32s
|++++++++++++++++++++++++++++++ | 60% ~01m 29s
|+++++++++++++++++++++++++++++++ | 61% ~01m 26s
|+++++++++++++++++++++++++++++++ | 62% ~01m 23s
|++++++++++++++++++++++++++++++++ | 63% ~01m 21s
|++++++++++++++++++++++++++++++++ | 64% ~01m 18s
|+++++++++++++++++++++++++++++++++ | 65% ~01m 15s
|+++++++++++++++++++++++++++++++++ | 66% ~01m 13s
|++++++++++++++++++++++++++++++++++ | 67% ~01m 10s
|+++++++++++++++++++++++++++++++++++ | 68% ~01m 08s
|+++++++++++++++++++++++++++++++++++ | 69% ~01m 06s
|++++++++++++++++++++++++++++++++++++ | 70% ~01m 04s
|++++++++++++++++++++++++++++++++++++ | 71% ~01m 01s
|+++++++++++++++++++++++++++++++++++++ | 72% ~58s
|+++++++++++++++++++++++++++++++++++++ | 73% ~56s
|++++++++++++++++++++++++++++++++++++++ | 74% ~53s
|++++++++++++++++++++++++++++++++++++++ | 75% ~51s
|+++++++++++++++++++++++++++++++++++++++ | 76% ~49s
|+++++++++++++++++++++++++++++++++++++++ | 77% ~46s
|++++++++++++++++++++++++++++++++++++++++ | 78% ~44s
|++++++++++++++++++++++++++++++++++++++++ | 79% ~42s
|+++++++++++++++++++++++++++++++++++++++++ | 80% ~39s
|+++++++++++++++++++++++++++++++++++++++++ | 81% ~37s
|++++++++++++++++++++++++++++++++++++++++++ | 82% ~35s
|++++++++++++++++++++++++++++++++++++++++++ | 84% ~33s
|+++++++++++++++++++++++++++++++++++++++++++ | 85% ~31s
|+++++++++++++++++++++++++++++++++++++++++++ | 86% ~29s
|++++++++++++++++++++++++++++++++++++++++++++ | 87% ~27s
|++++++++++++++++++++++++++++++++++++++++++++ | 88% ~24s
|+++++++++++++++++++++++++++++++++++++++++++++ | 89% ~22s
|+++++++++++++++++++++++++++++++++++++++++++++ | 90% ~20s
|++++++++++++++++++++++++++++++++++++++++++++++ | 91% ~18s
|++++++++++++++++++++++++++++++++++++++++++++++ | 92% ~16s
|+++++++++++++++++++++++++++++++++++++++++++++++ | 93% ~14s
|+++++++++++++++++++++++++++++++++++++++++++++++ | 94% ~12s
|++++++++++++++++++++++++++++++++++++++++++++++++ | 95% ~10s
|++++++++++++++++++++++++++++++++++++++++++++++++ | 96% ~08s
|+++++++++++++++++++++++++++++++++++++++++++++++++ | 97% ~06s
|+++++++++++++++++++++++++++++++++++++++++++++++++ | 98% ~04s
|++++++++++++++++++++++++++++++++++++++++++++++++++| 99% ~02s
|++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed = 03m 13s
| | 0 % ~calculating
|+ | 1 % ~03m 43s
|++ | 2 % ~03m 13s
|++ | 3 % ~03m 02s
|+++ | 4 % ~02m 54s
|+++ | 5 % ~02m 49s
|++++ | 7 % ~02m 44s
|++++ | 8 % ~02m 40s
|+++++ | 9 % ~02m 37s
|+++++ | 10% ~02m 35s
|++++++ | 11% ~02m 33s
|++++++ | 12% ~02m 32s
|+++++++ | 13% ~02m 30s
|++++++++ | 14% ~02m 40s
|++++++++ | 15% ~02m 41s
|+++++++++ | 16% ~03m 04s
|+++++++++ | 17% ~02m 58s
|++++++++++ | 18% ~02m 53s
|++++++++++ | 20% ~02m 49s
|+++++++++++ | 21% ~02m 46s
|+++++++++++ | 22% ~02m 42s
|++++++++++++ | 23% ~02m 38s
|++++++++++++ | 24% ~02m 35s
|+++++++++++++ | 25% ~02m 32s
|++++++++++++++ | 26% ~02m 28s
|++++++++++++++ | 27% ~02m 25s
|+++++++++++++++ | 28% ~02m 22s
|+++++++++++++++ | 29% ~02m 21s
|++++++++++++++++ | 30% ~02m 21s
|++++++++++++++++ | 32% ~02m 18s
|+++++++++++++++++ | 33% ~02m 17s
|+++++++++++++++++ | 34% ~02m 15s
|++++++++++++++++++ | 35% ~02m 12s
|++++++++++++++++++ | 36% ~02m 10s
|+++++++++++++++++++ | 37% ~02m 09s
|++++++++++++++++++++ | 38% ~02m 08s
|++++++++++++++++++++ | 39% ~02m 08s
|+++++++++++++++++++++ | 40% ~02m 05s
|+++++++++++++++++++++ | 41% ~02m 04s
|++++++++++++++++++++++ | 42% ~02m 01s
|++++++++++++++++++++++ | 43% ~01m 59s
|+++++++++++++++++++++++ | 45% ~01m 57s
|+++++++++++++++++++++++ | 46% ~01m 56s
|++++++++++++++++++++++++ | 47% ~01m 58s
|++++++++++++++++++++++++ | 48% ~01m 55s
|+++++++++++++++++++++++++ | 49% ~01m 52s
|+++++++++++++++++++++++++ | 50% ~01m 49s
|++++++++++++++++++++++++++ | 51% ~01m 47s
|+++++++++++++++++++++++++++ | 52% ~01m 44s
|+++++++++++++++++++++++++++ | 53% ~01m 41s
|++++++++++++++++++++++++++++ | 54% ~01m 38s
|++++++++++++++++++++++++++++ | 55% ~01m 36s
|+++++++++++++++++++++++++++++ | 57% ~01m 33s
|+++++++++++++++++++++++++++++ | 58% ~01m 33s
|++++++++++++++++++++++++++++++ | 59% ~01m 32s
|++++++++++++++++++++++++++++++ | 60% ~01m 30s
|+++++++++++++++++++++++++++++++ | 61% ~01m 27s
|+++++++++++++++++++++++++++++++ | 62% ~01m 24s
|++++++++++++++++++++++++++++++++ | 63% ~01m 22s
|+++++++++++++++++++++++++++++++++ | 64% ~01m 19s
|+++++++++++++++++++++++++++++++++ | 65% ~01m 17s
|++++++++++++++++++++++++++++++++++ | 66% ~01m 14s
|++++++++++++++++++++++++++++++++++ | 67% ~01m 12s
|+++++++++++++++++++++++++++++++++++ | 68% ~01m 10s
|+++++++++++++++++++++++++++++++++++ | 70% ~01m 07s
|++++++++++++++++++++++++++++++++++++ | 71% ~01m 05s
|++++++++++++++++++++++++++++++++++++ | 72% ~01m 02s
|+++++++++++++++++++++++++++++++++++++ | 73% ~60s
|+++++++++++++++++++++++++++++++++++++ | 74% ~57s
|++++++++++++++++++++++++++++++++++++++ | 75% ~55s
|+++++++++++++++++++++++++++++++++++++++ | 76% ~52s
|+++++++++++++++++++++++++++++++++++++++ | 77% ~50s
|++++++++++++++++++++++++++++++++++++++++ | 78% ~47s
|++++++++++++++++++++++++++++++++++++++++ | 79% ~45s
|+++++++++++++++++++++++++++++++++++++++++ | 80% ~43s
|+++++++++++++++++++++++++++++++++++++++++ | 82% ~40s
|++++++++++++++++++++++++++++++++++++++++++ | 83% ~38s
|++++++++++++++++++++++++++++++++++++++++++ | 84% ~35s
|+++++++++++++++++++++++++++++++++++++++++++ | 85% ~33s
|+++++++++++++++++++++++++++++++++++++++++++ | 86% ~31s
|++++++++++++++++++++++++++++++++++++++++++++ | 87% ~28s
|+++++++++++++++++++++++++++++++++++++++++++++ | 88% ~26s
|+++++++++++++++++++++++++++++++++++++++++++++ | 89% ~24s
|++++++++++++++++++++++++++++++++++++++++++++++ | 90% ~21s
|++++++++++++++++++++++++++++++++++++++++++++++ | 91% ~19s
|+++++++++++++++++++++++++++++++++++++++++++++++ | 92% ~17s
|+++++++++++++++++++++++++++++++++++++++++++++++ | 93% ~14s
|++++++++++++++++++++++++++++++++++++++++++++++++ | 95% ~12s
|++++++++++++++++++++++++++++++++++++++++++++++++ | 96% ~09s
|+++++++++++++++++++++++++++++++++++++++++++++++++ | 97% ~07s
|+++++++++++++++++++++++++++++++++++++++++++++++++ | 98% ~05s
|++++++++++++++++++++++++++++++++++++++++++++++++++| 99% ~02s
|++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed = 03m 38s
| | 0 % ~calculating
|+ | 1 % ~02m 37s
|++ | 2 % ~02m 29s
|++ | 3 % ~03m 20s
|+++ | 4 % ~03m 04s
|+++ | 5 % ~02m 59s
|++++ | 7 % ~02m 49s
|++++ | 8 % ~02m 40s
|+++++ | 9 % ~02m 32s
|+++++ | 10% ~02m 27s
|++++++ | 11% ~02m 26s
|+++++++ | 12% ~02m 21s
|+++++++ | 13% ~02m 17s
|++++++++ | 14% ~02m 17s
|++++++++ | 15% ~02m 12s
|+++++++++ | 16% ~02m 09s
|+++++++++ | 18% ~02m 06s
|++++++++++ | 19% ~02m 03s
|++++++++++ | 20% ~02m 00s
|+++++++++++ | 21% ~01m 58s
|+++++++++++ | 22% ~01m 55s
|++++++++++++ | 23% ~01m 53s
|+++++++++++++ | 24% ~01m 52s
|+++++++++++++ | 25% ~01m 50s
|++++++++++++++ | 26% ~01m 48s
|++++++++++++++ | 27% ~01m 47s
|+++++++++++++++ | 29% ~01m 46s
|+++++++++++++++ | 30% ~01m 45s
|++++++++++++++++ | 31% ~01m 43s
|++++++++++++++++ | 32% ~01m 43s
|+++++++++++++++++ | 33% ~01m 41s
|++++++++++++++++++ | 34% ~01m 41s
|++++++++++++++++++ | 35% ~01m 40s
|+++++++++++++++++++ | 36% ~01m 39s
|+++++++++++++++++++ | 37% ~01m 37s
|++++++++++++++++++++ | 38% ~01m 35s
|++++++++++++++++++++ | 40% ~01m 33s
|+++++++++++++++++++++ | 41% ~01m 32s
|+++++++++++++++++++++ | 42% ~01m 31s
|++++++++++++++++++++++ | 43% ~01m 31s
|++++++++++++++++++++++ | 44% ~01m 30s
|+++++++++++++++++++++++ | 45% ~01m 28s
|++++++++++++++++++++++++ | 46% ~01m 27s
|++++++++++++++++++++++++ | 47% ~01m 26s
|+++++++++++++++++++++++++ | 48% ~01m 24s
|+++++++++++++++++++++++++ | 49% ~01m 22s
|++++++++++++++++++++++++++ | 51% ~01m 21s
|++++++++++++++++++++++++++ | 52% ~01m 19s
|+++++++++++++++++++++++++++ | 53% ~01m 17s
|+++++++++++++++++++++++++++ | 54% ~01m 19s
|++++++++++++++++++++++++++++ | 55% ~01m 17s
|+++++++++++++++++++++++++++++ | 56% ~01m 15s
|+++++++++++++++++++++++++++++ | 57% ~01m 13s
|++++++++++++++++++++++++++++++ | 58% ~01m 12s
|++++++++++++++++++++++++++++++ | 59% ~01m 10s
|+++++++++++++++++++++++++++++++ | 60% ~01m 08s
|+++++++++++++++++++++++++++++++ | 62% ~01m 06s
|++++++++++++++++++++++++++++++++ | 63% ~01m 04s
|++++++++++++++++++++++++++++++++ | 64% ~01m 02s
|+++++++++++++++++++++++++++++++++ | 65% ~60s
|+++++++++++++++++++++++++++++++++ | 66% ~58s
|++++++++++++++++++++++++++++++++++ | 67% ~56s
|+++++++++++++++++++++++++++++++++++ | 68% ~54s
|+++++++++++++++++++++++++++++++++++ | 69% ~52s
|++++++++++++++++++++++++++++++++++++ | 70% ~50s
|++++++++++++++++++++++++++++++++++++ | 71% ~48s
|+++++++++++++++++++++++++++++++++++++ | 73% ~46s
|+++++++++++++++++++++++++++++++++++++ | 74% ~44s
|++++++++++++++++++++++++++++++++++++++ | 75% ~42s
|++++++++++++++++++++++++++++++++++++++ | 76% ~40s
|+++++++++++++++++++++++++++++++++++++++ | 77% ~38s
|++++++++++++++++++++++++++++++++++++++++ | 78% ~37s
|++++++++++++++++++++++++++++++++++++++++ | 79% ~35s
|+++++++++++++++++++++++++++++++++++++++++ | 80% ~33s
|+++++++++++++++++++++++++++++++++++++++++ | 81% ~31s
|++++++++++++++++++++++++++++++++++++++++++ | 82% ~29s
|++++++++++++++++++++++++++++++++++++++++++ | 84% ~28s
|+++++++++++++++++++++++++++++++++++++++++++ | 85% ~26s
|+++++++++++++++++++++++++++++++++++++++++++ | 86% ~24s
|++++++++++++++++++++++++++++++++++++++++++++ | 87% ~22s
|++++++++++++++++++++++++++++++++++++++++++++ | 88% ~20s
|+++++++++++++++++++++++++++++++++++++++++++++ | 89% ~18s
|++++++++++++++++++++++++++++++++++++++++++++++ | 90% ~16s
|++++++++++++++++++++++++++++++++++++++++++++++ | 91% ~15s
|+++++++++++++++++++++++++++++++++++++++++++++++ | 92% ~13s
|+++++++++++++++++++++++++++++++++++++++++++++++ | 93% ~11s
|++++++++++++++++++++++++++++++++++++++++++++++++ | 95% ~09s
|++++++++++++++++++++++++++++++++++++++++++++++++ | 96% ~07s
|+++++++++++++++++++++++++++++++++++++++++++++++++ | 97% ~05s
|+++++++++++++++++++++++++++++++++++++++++++++++++ | 98% ~04s
|++++++++++++++++++++++++++++++++++++++++++++++++++| 99% ~02s
|++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed = 02m 43s
# call library dplyr to use some of its functions
library(dplyr)
package ‘dplyr’ was built under R version 3.5.1
Attaching package: ‘dplyr’
The following objects are masked from ‘package:stats’:
filter, lag
The following objects are masked from ‘package:base’:
intersect, setdiff, setequal, union
# group by cluster using group_by function and show top 5 results using top_n function
pbmc.markers.grouped <- group_by(pbmc.markers, cluster)
pbmc.markers.grouped.top <- top_n(pbmc.markers.grouped, 5, avg_logFC)
# convert it to a matrix for downstream applications (trust me)
pbmc.markers.grouped.top <- as.matrix(pbmc.markers.grouped.top)
print(pbmc.markers.grouped.top)
p_val avg_logFC pct.1 pct.2 p_val_adj cluster gene
[1,] " 0.000000e+00" "1.360231" "0.688" "0.181" " 0.000000e+00" "0" "LTB"
[2,] " 0.000000e+00" "1.247725" "0.678" "0.224" " 0.000000e+00" "0" "LDHB"
[3,] " 0.000000e+00" "1.236988" "0.446" "0.104" " 0.000000e+00" "0" "SELL"
[4,] " 0.000000e+00" "1.151767" "0.962" "0.783" " 0.000000e+00" "0" "PABPC1"
[5,] " 0.000000e+00" "1.059882" "0.445" "0.125" " 0.000000e+00" "0" "IL7R"
[6,] " 0.000000e+00" "2.965944" "0.852" "0.050" " 0.000000e+00" "1" "S100A8"
[7,] " 0.000000e+00" "2.926204" "0.468" "0.038" " 0.000000e+00" "1" "CCL2"
[8,] " 0.000000e+00" "2.769285" "0.880" "0.091" " 0.000000e+00" "1" "IL8"
[9,] " 0.000000e+00" "2.730468" "0.762" "0.043" " 0.000000e+00" "1" "S100A9"
[10,] " 0.000000e+00" "2.405877" "1.000" "0.872" " 0.000000e+00" "1" "FTL"
[11,] " 0.000000e+00" "2.144159" "0.478" "0.032" " 0.000000e+00" "2" "GZMH"
[12,] " 0.000000e+00" "2.072391" "0.861" "0.126" " 0.000000e+00" "2" "CCL5"
[13,] " 0.000000e+00" "1.651099" "0.402" "0.038" " 0.000000e+00" "2" "CD8A"
[14,] " 0.000000e+00" "1.572040" "0.743" "0.107" " 0.000000e+00" "2" "NKG7"
[15,] " 0.000000e+00" "1.562925" "0.554" "0.082" " 0.000000e+00" "2" "GZMB"
[16,] " 0.000000e+00" "2.869341" "0.814" "0.020" " 0.000000e+00" "3" "CD79A"
[17,] " 0.000000e+00" "2.139385" "0.519" "0.009" " 0.000000e+00" "3" "MS4A1"
[18,] " 0.000000e+00" "2.132632" "0.998" "0.503" " 0.000000e+00" "3" "CD74"
[19,] " 0.000000e+00" "1.783456" "0.527" "0.077" " 0.000000e+00" "3" "CD83"
[20,] " 0.000000e+00" "1.776907" "0.401" "0.012" " 0.000000e+00" "3" "CD79B"
[21,] " 0.000000e+00" "3.521768" "0.945" "0.070" " 0.000000e+00" "4" "GNLY"
[22,] " 0.000000e+00" "2.607033" "0.950" "0.111" " 0.000000e+00" "4" "NKG7"
[23,] " 0.000000e+00" "2.490249" "0.845" "0.075" " 0.000000e+00" "4" "GZMB"
[24,] " 0.000000e+00" "2.446398" "0.569" "0.025" " 0.000000e+00" "4" "CLIC3"
[25,] " 0.000000e+00" "2.242966" "0.520" "0.042" " 0.000000e+00" "4" "FGFBP2"
[26,] " 0.000000e+00" "2.900754" "0.620" "0.036" " 0.000000e+00" "5" "VMO1"
[27,] " 0.000000e+00" "2.344538" "0.269" "0.006" " 0.000000e+00" "5" "CXCL10"
[28,] " 0.000000e+00" "2.296334" "0.841" "0.129" " 0.000000e+00" "5" "FCGR3A"
[29,] " 0.000000e+00" "2.146760" "0.824" "0.111" " 0.000000e+00" "5" "MS4A7"
[30,] " 0.000000e+00" "1.830722" "0.698" "0.067" " 0.000000e+00" "5" "IFITM3"
[31,] "2.858001e-294" "2.183459" "0.487" "0.067" "3.868876e-290" "6" "HSPH1"
[32,] "2.541939e-202" "2.142275" "0.677" "0.218" "3.441023e-198" "6" "CACYBP"
[33,] "8.179524e-148" "1.961616" "0.362" "0.070" "1.107262e-143" "6" "DNAJB1"
[34,] "2.725095e-146" "2.582634" "0.478" "0.134" "3.688962e-142" "6" "HSPB1"
[35,] " 2.001307e-90" "2.390347" "0.344" "0.098" " 2.709169e-86" "6" "HSPA1A"
[36,] " 0.000000e+00" "3.547369" "0.714" "0.032" " 0.000000e+00" "7" "PPBP"
[37,] " 0.000000e+00" "2.581009" "0.522" "0.007" " 0.000000e+00" "7" "PF4"
[38,] " 0.000000e+00" "2.513364" "0.528" "0.012" " 0.000000e+00" "7" "GNG11"
[39,] " 0.000000e+00" "2.213129" "0.457" "0.007" " 0.000000e+00" "7" "SDPR"
[40,] " 0.000000e+00" "1.827362" "0.298" "0.002" " 0.000000e+00" "7" "TUBB1"
[41,] " 0.000000e+00" "2.375324" "0.934" "0.118" " 0.000000e+00" "8" "HLA-DQA1"
[42,] "4.022389e-211" "2.344441" "0.985" "0.303" "5.445108e-207" "8" "HLA-DPA1"
[43,] "3.958257e-187" "2.249284" "0.996" "0.413" "5.358293e-183" "8" "HLA-DRA"
[44,] "4.185786e-176" "2.420208" "0.865" "0.219" "5.666298e-172" "8" "LYZ"
[45,] "2.606548e-143" "2.736058" "0.894" "0.262" "3.528484e-139" "8" "TXN"
[46,] " 0.000000e+00" "3.082401" "0.797" "0.015" " 0.000000e+00" "9" "MIR155HG"
[47,] " 0.000000e+00" "2.140877" "0.758" "0.025" " 0.000000e+00" "9" "NME1"
[48,] "9.557452e-207" "2.246809" "0.922" "0.126" "1.293792e-202" "9" "HLA-DQA1"
[49,] "2.175653e-183" "1.924433" "0.843" "0.110" "2.945181e-179" "9" "CD83"
[50,] "2.271334e-143" "2.287105" "0.673" "0.089" "3.074705e-139" "9" "MYC"
[51,] " 0.000000e+00" "6.778140" "1.000" "0.017" " 0.000000e+00" "10" "HBA2"
[52,] " 0.000000e+00" "6.221867" "1.000" "0.010" " 0.000000e+00" "10" "HBA1"
[53,] " 0.000000e+00" "2.675141" "0.780" "0.000" " 0.000000e+00" "10" "ALAS2"
[54,] "2.298284e-175" "2.029726" "0.780" "0.028" "3.111187e-171" "10" "SNCA"
[55,] "5.222162e-117" "7.546049" "1.000" "0.081" "7.069241e-113" "10" "HBB"
# What about using a different test? On your own time, trying adding the argument test.use = "roc" and see how different your results are.
Visualize differentially expressed genes
# The list of DE genes is long and it would be too much information to visualize them all. So, let's plot the top 5 features (genes) for each cluster. You could do this using a for loop, but let's keep it simple.
# First, isolate the top 5 DE genes for each cluster.
cluster_0 <- which(pbmc.markers.grouped.top[,"cluster"] == 0)
cluster_1 <- which(pbmc.markers.grouped.top[,"cluster"] == 1)
cluster_2 <- which(pbmc.markers.grouped.top[,"cluster"] == 2)
cluster_3 <- which(pbmc.markers.grouped.top[,"cluster"] == 3)
cluster_4 <- which(pbmc.markers.grouped.top[,"cluster"] == 4)
cluster_5 <- which(pbmc.markers.grouped.top[,"cluster"] == 5)
cluster_6 <- which(pbmc.markers.grouped.top[,"cluster"] == 6)
cluster_7 <- which(pbmc.markers.grouped.top[,"cluster"] == 7)
cluster_8 <- which(pbmc.markers.grouped.top[,"cluster"] == 8)
cluster_9 <- which(pbmc.markers.grouped.top[,"cluster"] == 9)
cluster_10 <- which(pbmc.markers.grouped.top[,"cluster"] == 10)
# 3 options for visualization...
# 1. Violin plots
# if you want to see the points, insert point.size.use = 0.1 into the argument list
# # specify cluster 0 here
VlnPlot(object = pbmc, features.plot = pbmc.markers.grouped.top[cluster_0, "gene"],
point.size.use = 0)

# # specify cluster 1 here
VlnPlot(object = pbmc, features.plot = pbmc.markers.grouped.top[cluster_1, "gene"],
point.size.use = 0)

# # specify cluster 2 here
VlnPlot(object = pbmc, features.plot = pbmc.markers.grouped.top[cluster_2, "gene"],
point.size.use = 0)

# # specify cluster 3 here
VlnPlot(object = pbmc, features.plot = pbmc.markers.grouped.top[cluster_3, "gene"],
point.size.use = 0)

# # specify cluster 4 here
VlnPlot(object = pbmc, features.plot = pbmc.markers.grouped.top[cluster_4, "gene"],
point.size.use = 0)

# # specify cluster 5 here
VlnPlot(object = pbmc, features.plot = pbmc.markers.grouped.top[cluster_5, "gene"],
point.size.use = 0)

# # specify cluster 6 here
VlnPlot(object = pbmc, features.plot = pbmc.markers.grouped.top[cluster_6, "gene"],
point.size.use = 0)

# # specify cluster 7 here
VlnPlot(object = pbmc, features.plot = pbmc.markers.grouped.top[cluster_7, "gene"],
point.size.use = 0)

# # specify cluster 8 here
VlnPlot(object = pbmc, features.plot = pbmc.markers.grouped.top[cluster_8, "gene"],
point.size.use = 0)

# # specify cluster 9 here
VlnPlot(object = pbmc, features.plot = pbmc.markers.grouped.top[cluster_9, "gene"],
point.size.use = 0)

# # specify cluster 10 here
VlnPlot(object = pbmc, features.plot = pbmc.markers.grouped.top[cluster_10, "gene"],
point.size.use = 0)

# 2. Feature plot
# here, use t-SNE for dim reduction
# Notes
# You could change the reduction.use to do PCA or ICA instead of t-SNE, but since we know where our clusters were mapped in the context of t-SNE, this makes the most sense for us.
# Cluster 0
FeaturePlot(object = pbmc, features.plot = pbmc.markers.grouped.top[cluster_0, "gene"], cols.use = c("grey", "blue"), reduction.use = "tsne")

# Cluster 1
FeaturePlot(object = pbmc, features.plot = pbmc.markers.grouped.top[cluster_1, "gene"], cols.use = c("grey", "blue"), reduction.use = "tsne")

# Cluster 2
FeaturePlot(object = pbmc, features.plot = pbmc.markers.grouped.top[cluster_2, "gene"], cols.use = c("grey", "blue"), reduction.use = "tsne")

# Cluster 3
FeaturePlot(object = pbmc, features.plot = pbmc.markers.grouped.top[cluster_3, "gene"], cols.use = c("grey", "blue"), reduction.use = "tsne")

# Cluster 4
FeaturePlot(object = pbmc, features.plot = pbmc.markers.grouped.top[cluster_4, "gene"], cols.use = c("grey", "blue"), reduction.use = "tsne")

# Cluster 5
FeaturePlot(object = pbmc, features.plot = pbmc.markers.grouped.top[cluster_5, "gene"], cols.use = c("grey", "blue"), reduction.use = "tsne")

# Cluster 6
FeaturePlot(object = pbmc, features.plot = pbmc.markers.grouped.top[cluster_6, "gene"], cols.use = c("grey", "blue"), reduction.use = "tsne")

# Cluster 7
FeaturePlot(object = pbmc, features.plot = pbmc.markers.grouped.top[cluster_7, "gene"], cols.use = c("grey", "blue"), reduction.use = "tsne")

# Cluster 8
FeaturePlot(object = pbmc, features.plot = pbmc.markers.grouped.top[cluster_8, "gene"], cols.use = c("grey", "blue"), reduction.use = "tsne")

# Cluster 9
FeaturePlot(object = pbmc, features.plot = pbmc.markers.grouped.top[cluster_9, "gene"], cols.use = c("grey", "blue"), reduction.use = "tsne")

# Cluster 10
FeaturePlot(object = pbmc, features.plot = pbmc.markers.grouped.top[cluster_10, "gene"], cols.use = c("grey", "blue"), reduction.use = "tsne")

# 3. Heatmap
# Heatmaps have enough room to show you the top 5 (or more!) genes for each cluster. Let's do the top 5, but if you have time, try changing the top features to 10 or more.
# All clusters
DoHeatmap(object = pbmc, genes.use = pbmc.markers.grouped.top[ , "gene"], slim.col.label = TRUE, remove.key = TRUE)

Save the object
# save this work and come back to it later
# <><><><><><> !!! <><><><><><>
saveRDS(pbmc, file = paste(directory, "/pbmc_only.rds", sep = ""))
STOPPING POINT
Now let’s add in a second dataset, which is PBMCs stimulated with interferon gamma
# You will need to change it to the directory where you have the file on your computer
# stim.data <- read.table("/Users/paigevega/Desktop/CQS_2018_DataScienceBiomedicalResearch/immune_stimulated_expression_matrix.txt.gz", sep = "\t")
stim.data <- read.table(paste(directory, "/immune_stimulated_expression_matrix.txt.gz", sep = ""), sep = "\t")
# create the Seurat object for the stimulated PBMCs
stim <- CreateSeuratObject(raw.data = stim.data, min.cells = 5, project = "stim_PBMC")
# Also re-create the control PBMC object because we will change a couple things this time and we don't want to have the previous info stored in the Seurat object.
pbmc <- CreateSeuratObject(raw.data = pbmc.data, min.cells = 5, project = "control_PBMC")
We have a few goals in this section of the analysis.
1. identify cell types present in both the control pbmc and stimulated pbmc datasets
2. find markers that identify cell types that are conserved in control and stimulated pbmcs
3. compare the datasets to find cell-type specific responses to interferon stimulation
Really, the goal is to reinforce the major steps in scRNA-seq analysis by going over some of them again. This time, we show how even a simple experimental design (control vs stimulated) can complicate the analysis.
Filtering, normalization, scaling, and find HVGs
VlnPlot(object = stim, features.plot = c("nGene", "nUMI"), nCol = 2, point.size.use = 0.001)

GenePlot(object = stim, gene1 = "nUMI", gene2 = "nGene")

# Filter out the stimulated pbmcs with low total gene expression
stim <- FilterCells(object = stim, subset.names = "nGene", low.thresholds = 500, high.thresholds = 1800)
# normalize
stim <- NormalizeData(stim)
Performing log-normalization
0% 10 20 30 40 50 60 70 80 90 100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
# scale
stim <- ScaleData(stim)
Scaling data matrix
|
| | 0%
|
|====== | 7%
|
|============ | 14%
|
|================== | 21%
|
|======================= | 29%
|
|============================= | 36%
|
|=================================== | 43%
|
|========================================= | 50%
|
|=============================================== | 57%
|
|===================================================== | 64%
|
|=========================================================== | 71%
|
|================================================================ | 79%
|
|====================================================================== | 86%
|
|============================================================================ | 93%
|
|==================================================================================| 100%
# Find variable genes
stim <-FindVariableGenes(stim)
Calculating gene means
0% 10 20 30 40 50 60 70 80 90 100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
Calculating gene variance to mean ratios
0% 10 20 30 40 50 60 70 80 90 100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|

# make metadata indicating it is stimulated
stim@meta.data$stim <- "STIM"
# yes, we already did this for the control dataset, but the downstream analysis requires a bit more selective filtering for it to run. The only changes we are making is choosing cells with 500-1800 genes instead of 200-1800 genes.
pbmc <- FilterCells(object = pbmc, subset.names = "nGene", low.thresholds = 500, high.thresholds = 1800)
# normalize
pbmc <- NormalizeData(pbmc)
Performing log-normalization
0% 10 20 30 40 50 60 70 80 90 100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
# scale
pbmc <- ScaleData(pbmc)
Scaling data matrix
|
| | 0%
|
|====== | 7%
|
|============ | 14%
|
|================== | 21%
|
|======================= | 29%
|
|============================= | 36%
|
|=================================== | 43%
|
|========================================= | 50%
|
|=============================================== | 57%
|
|===================================================== | 64%
|
|=========================================================== | 71%
|
|================================================================ | 79%
|
|====================================================================== | 86%
|
|============================================================================ | 93%
|
|==================================================================================| 100%
# Find variable genes
pbmc <-FindVariableGenes(pbmc)
Calculating gene means
0% 10 20 30 40 50 60 70 80 90 100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
Calculating gene variance to mean ratios
0% 10 20 30 40 50 60 70 80 90 100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|

# make metadata indicating it is stimulated
pbmc@meta.data$stim <- "CTRL"
# Calculates average expression and dispersion, using z-scores to determine outliers, which accounts for the relationship between variability and avg expression.
# Now find the highly variable genes that are shared between the two datasets (control and stimulated)
g.1 <- head(rownames(pbmc@hvg.info), 1000)
g.2 <- head(rownames(stim@hvg.info), 1000)
# keeps only unique genenames (gets rid of duplicates)
genes.use <- unique(c(g.1, g.2))
genes.use <- intersect(genes.use, rownames(pbmc@scale.data))
genes.use <- intersect(genes.use, rownames(stim@scale.data))
Canonical Correlation Analysis (CCA)
# Run CCA
# Insert some info to describe CCA.
immune.combined <- RunCCA(pbmc, stim, genes.use = genes.use, num.cc = 30)
Running CCA
Merging objects
Performing log-normalization
0% 10 20 30 40 50 60 70 80 90 100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
Scaling data matrix
|
| | 0%
|
|===== | 7%
|
|=========== | 13%
|
|================ | 20%
|
|====================== | 27%
|
|=========================== | 33%
|
|================================= | 40%
|
|====================================== | 47%
|
|============================================ | 53%
|
|================================================= | 60%
|
|======================================================= | 67%
|
|============================================================ | 73%
|
|================================================================== | 80%
|
|======================================================================= | 87%
|
|============================================================================= | 93%
|
|==================================================================================| 100%
# Visualize CCA results
# plot CC1 vs CC2
p1 <- DimPlot(object = immune.combined, reduction.use = "cca", group.by = "stim", pt.size = 0.5, do.return = TRUE)
# violin plot to visualize CC1 and CC2
p2 <- VlnPlot(object = immune.combined, features.plot = "CC1", group.by = "stim", do.return = TRUE, point.size.use = 0.001)
p3 <- VlnPlot(object = immune.combined, features.plot = "CC2", group.by = "stim", do.return = TRUE, point.size.use = 0.001)
plot(p1)

plot_grid(p2, p3)

Choose CCs
# Much like selecting the number of PCs to use in the first analysis, we must select the number of CCs to use here. The MetagenBicorPlot function below is analogous to the elbow plot method used in the first analysis of 1 dataset. You look for saturation (flatline).
# 2 ways to pick CCs, but we won't run the first because it takes too long to compute for the time we have in class. Feel free to try it on your own!
# # 1. MetageneBicorPlot
# p4 <- MetageneBicorPlot(immune.combined, grouping.var = "stim", dims.eval = 1:30, display.progress = TRUE)
p4
# 2. Heatmap - use the top 500 cells
# you need three pages to see all the CCs
# purple = low expression
# yellow = high
DimHeatmap(object = immune.combined, reduction.type = "cca", cells.use = 500, dim.use = 1:9,
do.balanced = TRUE)
DimHeatmap(object = immune.combined, reduction.type = "cca", cells.use = 500, dim.use = 10:18,
do.balanced = TRUE)
DimHeatmap(object = immune.combined, reduction.type = "cca", cells.use = 500, dim.use = 19:30,
do.balanced = TRUE)
# How many CCs do you think we should pick?
Align the CCA subspaces and visualize
# use the first 20 CCs to get a new dimension reduction that you can visualize and use for clustering
start.time3 <-Sys.time()
immune.combined <- AlignSubspace(immune.combined, reduction.type = "cca", grouping.var = "stim",
dims.align = 1:20)
Rescaling group 1
Scaling data matrix
|
| | 0%
|
|===== | 7%
|
|=========== | 13%
|
|================ | 20%
|
|====================== | 27%
|
|=========================== | 33%
|
|================================= | 40%
|
|====================================== | 47%
|
|============================================ | 53%
|
|================================================= | 60%
|
|======================================================= | 67%
|
|============================================================ | 73%
|
|================================================================== | 80%
|
|======================================================================= | 87%
|
|============================================================================= | 93%
|
|==================================================================================| 100%
Rescaling group 2
Scaling data matrix
|
| | 0%
|
|===== | 7%
|
|=========== | 13%
|
|================ | 20%
|
|====================== | 27%
|
|=========================== | 33%
|
|================================= | 40%
|
|====================================== | 47%
|
|============================================ | 53%
|
|================================================= | 60%
|
|======================================================= | 67%
|
|============================================================ | 73%
|
|================================================================== | 80%
|
|======================================================================= | 87%
|
|============================================================================= | 93%
|
|==================================================================================| 100%
Aligning dimension 1
| | 0 % ~calculating
|+ | 1 % ~07h 43m 24s
|+ | 2 % ~06h 22m 07s
|++ | 3 % ~04h 43m 13s
|++ | 4 % ~03h 49m 52s
|+++ | 5 % ~03h 07m 05s
|+++ | 6 % ~02h 40m 04s
|++++ | 7 % ~02h 16m 42s
|++++ | 8 % ~01h 59m 04s
|+++++ | 9 % ~01h 45m 01s
|+++++ | 10% ~01h 33m 42s
|++++++ | 11% ~01h 24m 28s
|++++++ | 12% ~01h 16m 47s
|+++++++ | 13% ~01h 10m 16s
|+++++++ | 14% ~01h 04m 38s
|++++++++ | 15% ~59m 46s
|++++++++ | 16% ~55m 34s
|+++++++++ | 17% ~51m 52s
|+++++++++ | 18% ~49m 02s
|++++++++++ | 19% ~46m 04s
|++++++++++ | 20% ~44m 40s
|+++++++++++ | 21% ~42m 09s
|+++++++++++ | 22% ~39m 49s
|++++++++++++ | 23% ~37m 48s
|++++++++++++ | 24% ~36m 01s
|+++++++++++++ | 25% ~34m 21s
|+++++++++++++ | 26% ~32m 49s
|++++++++++++++ | 27% ~31m 20s
|++++++++++++++ | 28% ~29m 51s
|+++++++++++++++ | 29% ~28m 26s
|+++++++++++++++ | 30% ~27m 07s
|++++++++++++++++ | 31% ~25m 52s
|++++++++++++++++ | 32% ~24m 43s
|+++++++++++++++++ | 33% ~23m 37s
|+++++++++++++++++ | 34% ~22m 36s
|++++++++++++++++++ | 35% ~21m 40s
|++++++++++++++++++ | 36% ~20m 45s
|+++++++++++++++++++ | 37% ~19m 53s
|+++++++++++++++++++ | 38% ~19m 04s
|++++++++++++++++++++ | 39% ~18m 17s
|++++++++++++++++++++ | 40% ~17m 32s
|+++++++++++++++++++++ | 41% ~16m 50s
|+++++++++++++++++++++ | 42% ~16m 10s
|++++++++++++++++++++++ | 43% ~15m 32s
|++++++++++++++++++++++ | 44% ~14m 55s
|+++++++++++++++++++++++ | 45% ~14m 21s
|+++++++++++++++++++++++ | 46% ~13m 49s
|++++++++++++++++++++++++ | 47% ~13m 19s
|++++++++++++++++++++++++ | 48% ~12m 50s
|+++++++++++++++++++++++++ | 49% ~12m 21s
|+++++++++++++++++++++++++ | 50% ~11m 54s
|++++++++++++++++++++++++++ | 51% ~11m 27s
|++++++++++++++++++++++++++ | 52% ~11m 01s
|+++++++++++++++++++++++++++ | 53% ~10m 36s
|+++++++++++++++++++++++++++ | 54% ~10m 12s
|++++++++++++++++++++++++++++ | 55% ~09m 48s
|++++++++++++++++++++++++++++ | 56% ~09m 26s
|+++++++++++++++++++++++++++++ | 57% ~09m 04s
|+++++++++++++++++++++++++++++ | 58% ~08m 46s
|++++++++++++++++++++++++++++++ | 59% ~08m 25s
|++++++++++++++++++++++++++++++ | 60% ~08m 05s
|+++++++++++++++++++++++++++++++ | 61% ~07m 46s
|+++++++++++++++++++++++++++++++ | 62% ~07m 27s
|++++++++++++++++++++++++++++++++ | 63% ~07m 08s
|++++++++++++++++++++++++++++++++ | 64% ~06m 51s
|+++++++++++++++++++++++++++++++++ | 65% ~06m 33s
|+++++++++++++++++++++++++++++++++ | 66% ~06m 16s
|++++++++++++++++++++++++++++++++++ | 67% ~06m 00s
|++++++++++++++++++++++++++++++++++ | 68% ~05m 45s
|+++++++++++++++++++++++++++++++++++ | 69% ~05m 30s
|+++++++++++++++++++++++++++++++++++ | 70% ~05m 15s
|++++++++++++++++++++++++++++++++++++ | 71% ~05m 00s
|++++++++++++++++++++++++++++++++++++ | 72% ~04m 46s
|+++++++++++++++++++++++++++++++++++++ | 73% ~04m 32s
|+++++++++++++++++++++++++++++++++++++ | 74% ~04m 19s
|++++++++++++++++++++++++++++++++++++++ | 75% ~04m 06s
|++++++++++++++++++++++++++++++++++++++ | 76% ~03m 53s
|+++++++++++++++++++++++++++++++++++++++ | 77% ~03m 40s
|+++++++++++++++++++++++++++++++++++++++ | 78% ~03m 28s
|++++++++++++++++++++++++++++++++++++++++ | 79% ~03m 16s
|++++++++++++++++++++++++++++++++++++++++ | 80% ~03m 05s
|+++++++++++++++++++++++++++++++++++++++++ | 81% ~02m 54s
|+++++++++++++++++++++++++++++++++++++++++ | 82% ~02m 43s
|++++++++++++++++++++++++++++++++++++++++++ | 83% ~02m 32s
|++++++++++++++++++++++++++++++++++++++++++ | 84% ~02m 21s
|+++++++++++++++++++++++++++++++++++++++++++ | 85% ~02m 11s
|+++++++++++++++++++++++++++++++++++++++++++ | 86% ~02m 01s
|++++++++++++++++++++++++++++++++++++++++++++ | 87% ~01m 51s
|++++++++++++++++++++++++++++++++++++++++++++ | 88% ~01m 42s
|+++++++++++++++++++++++++++++++++++++++++++++ | 89% ~01m 32s
|+++++++++++++++++++++++++++++++++++++++++++++ | 90% ~01m 23s
|++++++++++++++++++++++++++++++++++++++++++++++ | 91% ~01m 14s
|++++++++++++++++++++++++++++++++++++++++++++++ | 92% ~01m 05s
|+++++++++++++++++++++++++++++++++++++++++++++++ | 93% ~56s
|+++++++++++++++++++++++++++++++++++++++++++++++ | 94% ~48s
|++++++++++++++++++++++++++++++++++++++++++++++++ | 95% ~40s
|++++++++++++++++++++++++++++++++++++++++++++++++ | 96% ~32s
|+++++++++++++++++++++++++++++++++++++++++++++++++ | 97% ~24s
|+++++++++++++++++++++++++++++++++++++++++++++++++ | 98% ~16s
|++++++++++++++++++++++++++++++++++++++++++++++++++| 99% ~08s
|++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed = 13m 02s
| | 0 % ~calculating
|+ | 1 % ~37m 26s
|+ | 2 % ~34m 33s
|++ | 3 % ~28m 06s
|++ | 4 % ~25m 01s
|+++ | 5 % ~20m 24s
|+++ | 6 % ~17m 47s
|++++ | 7 % ~15m 12s
|++++ | 8 % ~13m 13s
|+++++ | 9 % ~11m 42s
|+++++ | 10% ~10m 27s
|++++++ | 11% ~09m 27s
|++++++ | 12% ~08m 39s
|+++++++ | 13% ~07m 56s
|+++++++ | 14% ~07m 19s
|++++++++ | 15% ~06m 47s
|++++++++ | 16% ~06m 19s
|+++++++++ | 17% ~05m 54s
|+++++++++ | 18% ~05m 45s
|++++++++++ | 19% ~05m 24s
|++++++++++ | 20% ~05m 06s
|+++++++++++ | 21% ~04m 49s
|+++++++++++ | 22% ~04m 34s
|++++++++++++ | 23% ~04m 20s
|++++++++++++ | 24% ~04m 07s
|+++++++++++++ | 25% ~03m 56s
|+++++++++++++ | 26% ~03m 45s
|++++++++++++++ | 27% ~03m 37s
|++++++++++++++ | 28% ~03m 29s
|+++++++++++++++ | 29% ~03m 22s
|+++++++++++++++ | 30% ~03m 14s
|++++++++++++++++ | 31% ~03m 06s
|++++++++++++++++ | 32% ~03m 03s
|+++++++++++++++++ | 33% ~02m 56s
|+++++++++++++++++ | 34% ~02m 48s
|++++++++++++++++++ | 35% ~02m 42s
|++++++++++++++++++ | 36% ~02m 35s
|+++++++++++++++++++ | 37% ~02m 29s
|+++++++++++++++++++ | 38% ~02m 23s
|++++++++++++++++++++ | 39% ~02m 18s
|++++++++++++++++++++ | 40% ~02m 13s
|+++++++++++++++++++++ | 41% ~02m 08s
|+++++++++++++++++++++ | 42% ~02m 03s
|++++++++++++++++++++++ | 43% ~01m 59s
|++++++++++++++++++++++ | 44% ~01m 54s
|+++++++++++++++++++++++ | 45% ~01m 50s
|+++++++++++++++++++++++ | 46% ~01m 46s
|++++++++++++++++++++++++ | 47% ~01m 42s
|++++++++++++++++++++++++ | 48% ~01m 39s
|+++++++++++++++++++++++++ | 49% ~01m 35s
|+++++++++++++++++++++++++ | 50% ~01m 32s
|++++++++++++++++++++++++++ | 51% ~01m 28s
|++++++++++++++++++++++++++ | 52% ~01m 25s
|+++++++++++++++++++++++++++ | 53% ~01m 22s
|+++++++++++++++++++++++++++ | 54% ~01m 19s
|++++++++++++++++++++++++++++ | 55% ~01m 17s
|++++++++++++++++++++++++++++ | 56% ~01m 14s
|+++++++++++++++++++++++++++++ | 57% ~01m 11s
|+++++++++++++++++++++++++++++ | 58% ~01m 09s
|++++++++++++++++++++++++++++++ | 59% ~01m 06s
|++++++++++++++++++++++++++++++ | 60% ~01m 04s
|+++++++++++++++++++++++++++++++ | 61% ~01m 02s
|+++++++++++++++++++++++++++++++ | 62% ~59s
|++++++++++++++++++++++++++++++++ | 63% ~57s
|++++++++++++++++++++++++++++++++ | 64% ~55s
|+++++++++++++++++++++++++++++++++ | 65% ~53s
|+++++++++++++++++++++++++++++++++ | 66% ~50s
|++++++++++++++++++++++++++++++++++ | 67% ~48s
|++++++++++++++++++++++++++++++++++ | 68% ~46s
|+++++++++++++++++++++++++++++++++++ | 69% ~45s
|+++++++++++++++++++++++++++++++++++ | 70% ~43s
|++++++++++++++++++++++++++++++++++++ | 71% ~41s
|++++++++++++++++++++++++++++++++++++ | 72% ~39s
|+++++++++++++++++++++++++++++++++++++ | 73% ~38s
|+++++++++++++++++++++++++++++++++++++ | 74% ~36s
|++++++++++++++++++++++++++++++++++++++ | 75% ~34s
|++++++++++++++++++++++++++++++++++++++ | 76% ~32s
|+++++++++++++++++++++++++++++++++++++++ | 77% ~31s
|+++++++++++++++++++++++++++++++++++++++ | 78% ~29s
|++++++++++++++++++++++++++++++++++++++++ | 79% ~27s
|++++++++++++++++++++++++++++++++++++++++ | 80% ~26s
|+++++++++++++++++++++++++++++++++++++++++ | 81% ~24s
|+++++++++++++++++++++++++++++++++++++++++ | 82% ~23s
|++++++++++++++++++++++++++++++++++++++++++ | 83% ~21s
|++++++++++++++++++++++++++++++++++++++++++ | 84% ~20s
|+++++++++++++++++++++++++++++++++++++++++++ | 85% ~18s
|+++++++++++++++++++++++++++++++++++++++++++ | 86% ~17s
|++++++++++++++++++++++++++++++++++++++++++++ | 87% ~16s
|++++++++++++++++++++++++++++++++++++++++++++ | 88% ~14s
|+++++++++++++++++++++++++++++++++++++++++++++ | 89% ~13s
|+++++++++++++++++++++++++++++++++++++++++++++ | 90% ~12s
|++++++++++++++++++++++++++++++++++++++++++++++ | 91% ~11s
|++++++++++++++++++++++++++++++++++++++++++++++ | 92% ~09s
|+++++++++++++++++++++++++++++++++++++++++++++++ | 93% ~08s
|+++++++++++++++++++++++++++++++++++++++++++++++ | 94% ~07s
|++++++++++++++++++++++++++++++++++++++++++++++++ | 95% ~06s
|++++++++++++++++++++++++++++++++++++++++++++++++ | 96% ~05s
|+++++++++++++++++++++++++++++++++++++++++++++++++ | 97% ~03s
|+++++++++++++++++++++++++++++++++++++++++++++++++ | 98% ~02s
|++++++++++++++++++++++++++++++++++++++++++++++++++| 99% ~01s
|++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed = 01m 50s
Aligning dimension 2
| | 0 % ~calculating
|+ | 1 % ~31m 49s
|+ | 2 % ~21m 59s
|++ | 3 % ~16m 46s
|++ | 4 % ~14m 46s
|+++ | 5 % ~12m 05s
|+++ | 6 % ~10m 25s
|++++ | 7 % ~09m 22s
|++++ | 8 % ~08m 14s
|+++++ | 9 % ~07m 24s
|+++++ | 10% ~06m 43s
|++++++ | 11% ~06m 06s
|++++++ | 12% ~05m 35s
|+++++++ | 13% ~05m 10s
|+++++++ | 14% ~04m 47s
|++++++++ | 15% ~04m 26s
|++++++++ | 16% ~04m 08s
|+++++++++ | 17% ~03m 52s
|+++++++++ | 18% ~03m 38s
|++++++++++ | 19% ~03m 25s
|++++++++++ | 20% ~03m 14s
|+++++++++++ | 21% ~03m 03s
|+++++++++++ | 22% ~02m 54s
|++++++++++++ | 23% ~02m 45s
|++++++++++++ | 24% ~02m 37s
|+++++++++++++ | 25% ~02m 30s
|+++++++++++++ | 26% ~02m 24s
|++++++++++++++ | 27% ~02m 18s
|++++++++++++++ | 28% ~02m 13s
|+++++++++++++++ | 29% ~02m 08s
|+++++++++++++++ | 30% ~02m 03s
|++++++++++++++++ | 31% ~01m 58s
|++++++++++++++++ | 32% ~01m 54s
|+++++++++++++++++ | 33% ~01m 49s
|+++++++++++++++++ | 34% ~01m 46s
|++++++++++++++++++ | 35% ~01m 42s
|++++++++++++++++++ | 36% ~01m 38s
|+++++++++++++++++++ | 37% ~01m 35s
|+++++++++++++++++++ | 38% ~01m 32s
|++++++++++++++++++++ | 39% ~01m 31s
|++++++++++++++++++++ | 40% ~01m 28s
|+++++++++++++++++++++ | 41% ~01m 24s
|+++++++++++++++++++++ | 42% ~01m 21s
|++++++++++++++++++++++ | 43% ~01m 18s
|++++++++++++++++++++++ | 44% ~01m 15s
|+++++++++++++++++++++++ | 45% ~01m 13s
|+++++++++++++++++++++++ | 46% ~01m 10s
|++++++++++++++++++++++++ | 47% ~01m 07s
|++++++++++++++++++++++++ | 48% ~01m 05s
|+++++++++++++++++++++++++ | 49% ~01m 04s
|+++++++++++++++++++++++++ | 50% ~01m 02s
|++++++++++++++++++++++++++ | 51% ~59s
|++++++++++++++++++++++++++ | 52% ~57s
|+++++++++++++++++++++++++++ | 53% ~56s
|+++++++++++++++++++++++++++ | 54% ~54s
|++++++++++++++++++++++++++++ | 55% ~52s
|++++++++++++++++++++++++++++ | 56% ~50s
|+++++++++++++++++++++++++++++ | 57% ~49s
|+++++++++++++++++++++++++++++ | 58% ~47s
|++++++++++++++++++++++++++++++ | 59% ~46s
|++++++++++++++++++++++++++++++ | 60% ~44s
|+++++++++++++++++++++++++++++++ | 61% ~42s
|+++++++++++++++++++++++++++++++ | 62% ~41s
|++++++++++++++++++++++++++++++++ | 63% ~39s
|++++++++++++++++++++++++++++++++ | 64% ~38s
|+++++++++++++++++++++++++++++++++ | 65% ~37s
|+++++++++++++++++++++++++++++++++ | 66% ~35s
|++++++++++++++++++++++++++++++++++ | 67% ~34s
|++++++++++++++++++++++++++++++++++ | 68% ~33s
|+++++++++++++++++++++++++++++++++++ | 69% ~31s
|+++++++++++++++++++++++++++++++++++ | 70% ~30s
|++++++++++++++++++++++++++++++++++++ | 71% ~29s
|++++++++++++++++++++++++++++++++++++ | 72% ~28s
|+++++++++++++++++++++++++++++++++++++ | 73% ~26s
|+++++++++++++++++++++++++++++++++++++ | 74% ~25s
|++++++++++++++++++++++++++++++++++++++ | 75% ~24s
|++++++++++++++++++++++++++++++++++++++ | 76% ~23s
|+++++++++++++++++++++++++++++++++++++++ | 77% ~22s
|+++++++++++++++++++++++++++++++++++++++ | 78% ~21s
|++++++++++++++++++++++++++++++++++++++++ | 79% ~20s
|++++++++++++++++++++++++++++++++++++++++ | 80% ~19s
|+++++++++++++++++++++++++++++++++++++++++ | 81% ~18s
|+++++++++++++++++++++++++++++++++++++++++ | 82% ~16s
|++++++++++++++++++++++++++++++++++++++++++ | 83% ~15s
|++++++++++++++++++++++++++++++++++++++++++ | 84% ~14s
|+++++++++++++++++++++++++++++++++++++++++++ | 85% ~13s
|+++++++++++++++++++++++++++++++++++++++++++ | 86% ~12s
|++++++++++++++++++++++++++++++++++++++++++++ | 87% ~11s
|++++++++++++++++++++++++++++++++++++++++++++ | 88% ~10s
|+++++++++++++++++++++++++++++++++++++++++++++ | 89% ~10s
|+++++++++++++++++++++++++++++++++++++++++++++ | 90% ~09s
|++++++++++++++++++++++++++++++++++++++++++++++ | 91% ~08s
|++++++++++++++++++++++++++++++++++++++++++++++ | 92% ~07s
|+++++++++++++++++++++++++++++++++++++++++++++++ | 93% ~06s
|+++++++++++++++++++++++++++++++++++++++++++++++ | 94% ~05s
|++++++++++++++++++++++++++++++++++++++++++++++++ | 95% ~04s
|++++++++++++++++++++++++++++++++++++++++++++++++ | 96% ~03s
|+++++++++++++++++++++++++++++++++++++++++++++++++ | 97% ~02s
|+++++++++++++++++++++++++++++++++++++++++++++++++ | 98% ~02s
|++++++++++++++++++++++++++++++++++++++++++++++++++| 99% ~01s
|++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed = 01m 22s
| | 0 % ~calculating
|+ | 1 % ~38m 07s
|+ | 2 % ~41m 33s
|++ | 3 % ~28m 50s
|++ | 4 % ~23m 28s
|+++ | 5 % ~18m 48s
|+++ | 6 % ~15m 48s
|++++ | 7 % ~13m 50s
|++++ | 8 % ~12m 03s
|+++++ | 9 % ~10m 39s
|+++++ | 10% ~09m 32s
|++++++ | 11% ~08m 36s
|++++++ | 12% ~07m 50s
|+++++++ | 13% ~07m 25s
|+++++++ | 14% ~06m 50s
|++++++++ | 15% ~06m 19s
|++++++++ | 16% ~05m 52s
|+++++++++ | 17% ~05m 28s
|+++++++++ | 18% ~05m 07s
|++++++++++ | 19% ~04m 48s
|++++++++++ | 20% ~04m 31s
|+++++++++++ | 21% ~04m 16s
|+++++++++++ | 22% ~04m 03s
|++++++++++++ | 23% ~03m 51s
|++++++++++++ | 24% ~03m 39s
|+++++++++++++ | 25% ~03m 29s
|+++++++++++++ | 26% ~03m 19s
|++++++++++++++ | 27% ~03m 10s
|++++++++++++++ | 28% ~03m 01s
|+++++++++++++++ | 29% ~02m 53s
|+++++++++++++++ | 30% ~02m 46s
|++++++++++++++++ | 31% ~02m 40s
|++++++++++++++++ | 32% ~02m 33s
|+++++++++++++++++ | 33% ~02m 27s
|+++++++++++++++++ | 34% ~02m 21s
|++++++++++++++++++ | 35% ~02m 15s
|++++++++++++++++++ | 36% ~02m 10s
|+++++++++++++++++++ | 37% ~02m 05s
|+++++++++++++++++++ | 38% ~01m 60s
|++++++++++++++++++++ | 39% ~01m 55s
|++++++++++++++++++++ | 40% ~01m 51s
|+++++++++++++++++++++ | 41% ~01m 47s
|+++++++++++++++++++++ | 42% ~01m 43s
|++++++++++++++++++++++ | 43% ~01m 39s
|++++++++++++++++++++++ | 44% ~01m 35s
|+++++++++++++++++++++++ | 45% ~01m 32s
|+++++++++++++++++++++++ | 46% ~01m 29s
|++++++++++++++++++++++++ | 47% ~01m 26s
|++++++++++++++++++++++++ | 48% ~01m 23s
|+++++++++++++++++++++++++ | 49% ~01m 20s
|+++++++++++++++++++++++++ | 50% ~01m 17s
|++++++++++++++++++++++++++ | 51% ~01m 16s
|++++++++++++++++++++++++++ | 52% ~01m 13s
|+++++++++++++++++++++++++++ | 53% ~01m 11s
|+++++++++++++++++++++++++++ | 54% ~01m 08s
|++++++++++++++++++++++++++++ | 55% ~01m 06s
|++++++++++++++++++++++++++++ | 56% ~01m 03s
|+++++++++++++++++++++++++++++ | 57% ~01m 01s
|+++++++++++++++++++++++++++++ | 58% ~59s
|++++++++++++++++++++++++++++++ | 59% ~57s
|++++++++++++++++++++++++++++++ | 60% ~54s
|+++++++++++++++++++++++++++++++ | 61% ~52s
|+++++++++++++++++++++++++++++++ | 62% ~51s
|++++++++++++++++++++++++++++++++ | 63% ~49s
|++++++++++++++++++++++++++++++++ | 64% ~47s
|+++++++++++++++++++++++++++++++++ | 65% ~45s
|+++++++++++++++++++++++++++++++++ | 66% ~43s
|++++++++++++++++++++++++++++++++++ | 67% ~42s
|++++++++++++++++++++++++++++++++++ | 68% ~40s
|+++++++++++++++++++++++++++++++++++ | 69% ~38s
|+++++++++++++++++++++++++++++++++++ | 70% ~37s
|++++++++++++++++++++++++++++++++++++ | 71% ~35s
|++++++++++++++++++++++++++++++++++++ | 72% ~33s
|+++++++++++++++++++++++++++++++++++++ | 73% ~32s
|+++++++++++++++++++++++++++++++++++++ | 74% ~30s
|++++++++++++++++++++++++++++++++++++++ | 75% ~29s
|++++++++++++++++++++++++++++++++++++++ | 76% ~27s
|+++++++++++++++++++++++++++++++++++++++ | 77% ~26s
|+++++++++++++++++++++++++++++++++++++++ | 78% ~25s
|++++++++++++++++++++++++++++++++++++++++ | 79% ~23s
|++++++++++++++++++++++++++++++++++++++++ | 80% ~22s
|+++++++++++++++++++++++++++++++++++++++++ | 81% ~21s
|+++++++++++++++++++++++++++++++++++++++++ | 82% ~19s
|++++++++++++++++++++++++++++++++++++++++++ | 83% ~18s
|++++++++++++++++++++++++++++++++++++++++++ | 84% ~17s
|+++++++++++++++++++++++++++++++++++++++++++ | 85% ~16s
|+++++++++++++++++++++++++++++++++++++++++++ | 86% ~15s
|++++++++++++++++++++++++++++++++++++++++++++ | 87% ~13s
|++++++++++++++++++++++++++++++++++++++++++++ | 88% ~12s
|+++++++++++++++++++++++++++++++++++++++++++++ | 89% ~12s
|+++++++++++++++++++++++++++++++++++++++++++++ | 90% ~11s
|++++++++++++++++++++++++++++++++++++++++++++++ | 91% ~10s
|++++++++++++++++++++++++++++++++++++++++++++++ | 92% ~08s
|+++++++++++++++++++++++++++++++++++++++++++++++ | 93% ~07s
|+++++++++++++++++++++++++++++++++++++++++++++++ | 94% ~06s
|++++++++++++++++++++++++++++++++++++++++++++++++ | 95% ~05s
|++++++++++++++++++++++++++++++++++++++++++++++++ | 96% ~04s
|+++++++++++++++++++++++++++++++++++++++++++++++++ | 97% ~03s
|+++++++++++++++++++++++++++++++++++++++++++++++++ | 98% ~02s
|++++++++++++++++++++++++++++++++++++++++++++++++++| 99% ~01s
|++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed = 01m 41s
Aligning dimension 3
| | 0 % ~calculating
|+ | 1 % ~04m 31s
|+ | 2 % ~03m 36s
|++ | 3 % ~03m 03s
|++ | 4 % ~02m 30s
|+++ | 5 % ~02m 10s
|+++ | 6 % ~02m 04s
|++++ | 7 % ~01m 51s
|++++ | 8 % ~01m 40s
|+++++ | 9 % ~01m 31s
|+++++ | 10% ~01m 24s
|++++++ | 11% ~01m 18s
|++++++ | 12% ~01m 13s
|+++++++ | 13% ~01m 09s
|+++++++ | 14% ~01m 05s
|++++++++ | 15% ~01m 01s
|++++++++ | 16% ~58s
|+++++++++ | 17% ~56s
|+++++++++ | 18% ~53s
|++++++++++ | 19% ~51s
|++++++++++ | 20% ~49s
|+++++++++++ | 21% ~48s
|+++++++++++ | 22% ~47s
|++++++++++++ | 23% ~46s
|++++++++++++ | 24% ~45s
|+++++++++++++ | 25% ~43s
|+++++++++++++ | 26% ~42s
|++++++++++++++ | 27% ~41s
|++++++++++++++ | 28% ~41s
|+++++++++++++++ | 29% ~41s
|+++++++++++++++ | 30% ~41s
|++++++++++++++++ | 31% ~41s
|++++++++++++++++ | 32% ~41s
|+++++++++++++++++ | 33% ~40s
|+++++++++++++++++ | 34% ~40s
|++++++++++++++++++ | 35% ~40s
|++++++++++++++++++ | 36% ~40s
|+++++++++++++++++++ | 37% ~43s
|+++++++++++++++++++ | 38% ~42s
|++++++++++++++++++++ | 39% ~40s
|++++++++++++++++++++ | 40% ~39s
|+++++++++++++++++++++ | 41% ~38s
|+++++++++++++++++++++ | 42% ~36s
|++++++++++++++++++++++ | 43% ~35s
|++++++++++++++++++++++ | 44% ~35s
|+++++++++++++++++++++++ | 45% ~34s
|+++++++++++++++++++++++ | 46% ~33s
|++++++++++++++++++++++++ | 47% ~32s
|++++++++++++++++++++++++ | 48% ~32s
|+++++++++++++++++++++++++ | 49% ~31s
|+++++++++++++++++++++++++ | 50% ~30s
|++++++++++++++++++++++++++ | 51% ~29s
|++++++++++++++++++++++++++ | 52% ~28s
|+++++++++++++++++++++++++++ | 53% ~27s
|+++++++++++++++++++++++++++ | 54% ~26s
|++++++++++++++++++++++++++++ | 55% ~25s
|++++++++++++++++++++++++++++ | 56% ~25s
|+++++++++++++++++++++++++++++ | 57% ~24s
|+++++++++++++++++++++++++++++ | 58% ~23s
|++++++++++++++++++++++++++++++ | 59% ~23s
|++++++++++++++++++++++++++++++ | 60% ~22s
|+++++++++++++++++++++++++++++++ | 61% ~21s
|+++++++++++++++++++++++++++++++ | 62% ~20s
|++++++++++++++++++++++++++++++++ | 63% ~20s
|++++++++++++++++++++++++++++++++ | 64% ~19s
|+++++++++++++++++++++++++++++++++ | 65% ~19s
|+++++++++++++++++++++++++++++++++ | 66% ~18s
|++++++++++++++++++++++++++++++++++ | 67% ~17s
|++++++++++++++++++++++++++++++++++ | 68% ~17s
|+++++++++++++++++++++++++++++++++++ | 69% ~16s
|+++++++++++++++++++++++++++++++++++ | 70% ~15s
|++++++++++++++++++++++++++++++++++++ | 71% ~15s
|++++++++++++++++++++++++++++++++++++ | 72% ~14s
|+++++++++++++++++++++++++++++++++++++ | 73% ~14s
|+++++++++++++++++++++++++++++++++++++ | 74% ~14s
|++++++++++++++++++++++++++++++++++++++ | 75% ~13s
|++++++++++++++++++++++++++++++++++++++ | 76% ~13s
|+++++++++++++++++++++++++++++++++++++++ | 77% ~12s
|+++++++++++++++++++++++++++++++++++++++ | 78% ~12s
|++++++++++++++++++++++++++++++++++++++++ | 79% ~11s
|++++++++++++++++++++++++++++++++++++++++ | 80% ~11s
|+++++++++++++++++++++++++++++++++++++++++ | 81% ~10s
|+++++++++++++++++++++++++++++++++++++++++ | 82% ~10s
|++++++++++++++++++++++++++++++++++++++++++ | 83% ~09s
|++++++++++++++++++++++++++++++++++++++++++ | 84% ~09s
|+++++++++++++++++++++++++++++++++++++++++++ | 85% ~08s
|+++++++++++++++++++++++++++++++++++++++++++ | 86% ~08s
|++++++++++++++++++++++++++++++++++++++++++++ | 87% ~07s
|++++++++++++++++++++++++++++++++++++++++++++ | 88% ~06s
|+++++++++++++++++++++++++++++++++++++++++++++ | 89% ~06s
|+++++++++++++++++++++++++++++++++++++++++++++ | 90% ~05s
|++++++++++++++++++++++++++++++++++++++++++++++ | 91% ~05s
|++++++++++++++++++++++++++++++++++++++++++++++ | 92% ~04s
|+++++++++++++++++++++++++++++++++++++++++++++++ | 93% ~04s
|+++++++++++++++++++++++++++++++++++++++++++++++ | 94% ~03s
|++++++++++++++++++++++++++++++++++++++++++++++++ | 95% ~03s
|++++++++++++++++++++++++++++++++++++++++++++++++ | 96% ~02s
|+++++++++++++++++++++++++++++++++++++++++++++++++ | 97% ~02s
|+++++++++++++++++++++++++++++++++++++++++++++++++ | 98% ~01s
|++++++++++++++++++++++++++++++++++++++++++++++++++| 99% ~01s
|++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed = 54s
| | 0 % ~calculating
|+ | 1 % ~19m 01s
|+ | 2 % ~17m 23s
|++ | 3 % ~13m 07s
|++ | 4 % ~10m 52s
|+++ | 5 % ~08m 47s
|+++ | 6 % ~07m 21s
|++++ | 7 % ~06m 20s
|++++ | 8 % ~05m 35s
|+++++ | 9 % ~04m 58s
|+++++ | 10% ~04m 29s
|++++++ | 11% ~04m 18s
|++++++ | 12% ~03m 56s
|+++++++ | 13% ~03m 38s
|+++++++ | 14% ~03m 21s
|++++++++ | 15% ~03m 06s
|++++++++ | 16% ~02m 53s
|+++++++++ | 17% ~02m 42s
|+++++++++ | 18% ~02m 32s
|++++++++++ | 19% ~02m 23s
|++++++++++ | 20% ~02m 14s
|+++++++++++ | 21% ~02m 08s
|+++++++++++ | 22% ~02m 03s
|++++++++++++ | 23% ~01m 58s
|++++++++++++ | 24% ~01m 53s
|+++++++++++++ | 25% ~01m 48s
|+++++++++++++ | 26% ~01m 43s
|++++++++++++++ | 27% ~01m 39s
|++++++++++++++ | 28% ~01m 35s
|+++++++++++++++ | 29% ~01m 31s
|+++++++++++++++ | 30% ~01m 28s
|++++++++++++++++ | 31% ~01m 24s
|++++++++++++++++ | 32% ~01m 21s
|+++++++++++++++++ | 33% ~01m 19s
|+++++++++++++++++ | 34% ~01m 16s
|++++++++++++++++++ | 35% ~01m 14s
|++++++++++++++++++ | 36% ~01m 12s
|+++++++++++++++++++ | 37% ~01m 10s
|+++++++++++++++++++ | 38% ~01m 07s
|++++++++++++++++++++ | 39% ~01m 05s
|++++++++++++++++++++ | 40% ~01m 03s
|+++++++++++++++++++++ | 41% ~01m 00s
|+++++++++++++++++++++ | 42% ~59s
|++++++++++++++++++++++ | 43% ~57s
|++++++++++++++++++++++ | 44% ~55s
|+++++++++++++++++++++++ | 45% ~53s
|+++++++++++++++++++++++ | 46% ~51s
|++++++++++++++++++++++++ | 47% ~49s
|++++++++++++++++++++++++ | 48% ~50s
|+++++++++++++++++++++++++ | 49% ~48s
|+++++++++++++++++++++++++ | 50% ~46s
|++++++++++++++++++++++++++ | 51% ~45s
|++++++++++++++++++++++++++ | 52% ~43s
|+++++++++++++++++++++++++++ | 53% ~41s
|+++++++++++++++++++++++++++ | 54% ~40s
|++++++++++++++++++++++++++++ | 55% ~39s
|++++++++++++++++++++++++++++ | 56% ~37s
|+++++++++++++++++++++++++++++ | 57% ~36s
|+++++++++++++++++++++++++++++ | 58% ~35s
|++++++++++++++++++++++++++++++ | 59% ~34s
|++++++++++++++++++++++++++++++ | 60% ~32s
|+++++++++++++++++++++++++++++++ | 61% ~31s
|+++++++++++++++++++++++++++++++ | 62% ~30s
|++++++++++++++++++++++++++++++++ | 63% ~29s
|++++++++++++++++++++++++++++++++ | 64% ~28s
|+++++++++++++++++++++++++++++++++ | 65% ~27s
|+++++++++++++++++++++++++++++++++ | 66% ~26s
|++++++++++++++++++++++++++++++++++ | 67% ~25s
|++++++++++++++++++++++++++++++++++ | 68% ~24s
|+++++++++++++++++++++++++++++++++++ | 69% ~23s
|+++++++++++++++++++++++++++++++++++ | 70% ~22s
|++++++++++++++++++++++++++++++++++++ | 71% ~21s
|++++++++++++++++++++++++++++++++++++ | 72% ~20s
|+++++++++++++++++++++++++++++++++++++ | 73% ~19s
|+++++++++++++++++++++++++++++++++++++ | 74% ~19s
|++++++++++++++++++++++++++++++++++++++ | 75% ~18s
|++++++++++++++++++++++++++++++++++++++ | 76% ~17s
|+++++++++++++++++++++++++++++++++++++++ | 77% ~16s
|+++++++++++++++++++++++++++++++++++++++ | 78% ~16s
|++++++++++++++++++++++++++++++++++++++++ | 79% ~15s
|++++++++++++++++++++++++++++++++++++++++ | 80% ~14s
|+++++++++++++++++++++++++++++++++++++++++ | 81% ~13s
|+++++++++++++++++++++++++++++++++++++++++ | 82% ~12s
|++++++++++++++++++++++++++++++++++++++++++ | 83% ~12s
|++++++++++++++++++++++++++++++++++++++++++ | 84% ~11s
|+++++++++++++++++++++++++++++++++++++++++++ | 85% ~10s
|+++++++++++++++++++++++++++++++++++++++++++ | 86% ~10s
|++++++++++++++++++++++++++++++++++++++++++++ | 87% ~09s
|++++++++++++++++++++++++++++++++++++++++++++ | 88% ~08s
|+++++++++++++++++++++++++++++++++++++++++++++ | 89% ~07s
|+++++++++++++++++++++++++++++++++++++++++++++ | 90% ~07s
|++++++++++++++++++++++++++++++++++++++++++++++ | 91% ~06s
|++++++++++++++++++++++++++++++++++++++++++++++ | 92% ~05s
|+++++++++++++++++++++++++++++++++++++++++++++++ | 93% ~05s
|+++++++++++++++++++++++++++++++++++++++++++++++ | 94% ~04s
|++++++++++++++++++++++++++++++++++++++++++++++++ | 95% ~03s
|++++++++++++++++++++++++++++++++++++++++++++++++ | 96% ~03s
|+++++++++++++++++++++++++++++++++++++++++++++++++ | 97% ~02s
|+++++++++++++++++++++++++++++++++++++++++++++++++ | 98% ~01s
|++++++++++++++++++++++++++++++++++++++++++++++++++| 99% ~01s
|++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed = 01m 04s
Aligning dimension 4
| | 0 % ~calculating
|+ | 1 % ~05m 10s
|+ | 2 % ~04m 19s
|++ | 3 % ~03m 12s
|++ | 4 % ~03m 04s
|+++ | 5 % ~02m 36s
|+++ | 6 % ~02m 14s
|++++ | 7 % ~02m 11s
|++++ | 8 % ~02m 00s
|+++++ | 9 % ~01m 50s
|+++++ | 10% ~01m 45s
|++++++ | 11% ~01m 40s
|++++++ | 12% ~01m 35s
|+++++++ | 13% ~01m 29s
|+++++++ | 14% ~01m 24s
|++++++++ | 15% ~01m 19s
|++++++++ | 16% ~01m 15s
|+++++++++ | 17% ~01m 12s
|+++++++++ | 18% ~01m 08s
|++++++++++ | 19% ~01m 05s
|++++++++++ | 20% ~01m 02s
|+++++++++++ | 21% ~60s
|+++++++++++ | 22% ~58s
|++++++++++++ | 23% ~56s
|++++++++++++ | 24% ~54s
|+++++++++++++ | 25% ~52s
|+++++++++++++ | 26% ~50s
|++++++++++++++ | 27% ~49s
|++++++++++++++ | 28% ~47s
|+++++++++++++++ | 29% ~46s
|+++++++++++++++ | 30% ~45s
|++++++++++++++++ | 31% ~44s
|++++++++++++++++ | 32% ~43s
|+++++++++++++++++ | 33% ~42s
|+++++++++++++++++ | 34% ~41s
|++++++++++++++++++ | 35% ~40s
|++++++++++++++++++ | 36% ~39s
|+++++++++++++++++++ | 37% ~38s
|+++++++++++++++++++ | 38% ~38s
|++++++++++++++++++++ | 39% ~39s
|++++++++++++++++++++ | 40% ~42s
|+++++++++++++++++++++ | 41% ~41s
|+++++++++++++++++++++ | 42% ~39s
|++++++++++++++++++++++ | 43% ~38s
|++++++++++++++++++++++ | 44% ~37s
|+++++++++++++++++++++++ | 45% ~36s
|+++++++++++++++++++++++ | 46% ~35s
|++++++++++++++++++++++++ | 47% ~34s
|++++++++++++++++++++++++ | 48% ~34s
|+++++++++++++++++++++++++ | 49% ~34s
|+++++++++++++++++++++++++ | 50% ~33s
|++++++++++++++++++++++++++ | 51% ~32s
|++++++++++++++++++++++++++ | 52% ~31s
|+++++++++++++++++++++++++++ | 53% ~31s
|+++++++++++++++++++++++++++ | 54% ~30s
|++++++++++++++++++++++++++++ | 55% ~30s
|++++++++++++++++++++++++++++ | 56% ~29s
|+++++++++++++++++++++++++++++ | 57% ~28s
|+++++++++++++++++++++++++++++ | 58% ~27s
|++++++++++++++++++++++++++++++ | 59% ~26s
|++++++++++++++++++++++++++++++ | 60% ~25s
|+++++++++++++++++++++++++++++++ | 61% ~25s
|+++++++++++++++++++++++++++++++ | 62% ~24s
|++++++++++++++++++++++++++++++++ | 63% ~23s
|++++++++++++++++++++++++++++++++ | 64% ~22s
|+++++++++++++++++++++++++++++++++ | 65% ~22s
|+++++++++++++++++++++++++++++++++ | 66% ~21s
|++++++++++++++++++++++++++++++++++ | 67% ~20s
|++++++++++++++++++++++++++++++++++ | 68% ~19s
|+++++++++++++++++++++++++++++++++++ | 69% ~19s
|+++++++++++++++++++++++++++++++++++ | 70% ~18s
|++++++++++++++++++++++++++++++++++++ | 71% ~17s
|++++++++++++++++++++++++++++++++++++ | 72% ~17s
|+++++++++++++++++++++++++++++++++++++ | 73% ~16s
|+++++++++++++++++++++++++++++++++++++ | 74% ~15s
|++++++++++++++++++++++++++++++++++++++ | 75% ~15s
|++++++++++++++++++++++++++++++++++++++ | 76% ~14s
|+++++++++++++++++++++++++++++++++++++++ | 77% ~14s
|+++++++++++++++++++++++++++++++++++++++ | 78% ~13s
|++++++++++++++++++++++++++++++++++++++++ | 79% ~13s
|++++++++++++++++++++++++++++++++++++++++ | 80% ~12s
|+++++++++++++++++++++++++++++++++++++++++ | 81% ~11s
|+++++++++++++++++++++++++++++++++++++++++ | 82% ~11s
|++++++++++++++++++++++++++++++++++++++++++ | 83% ~10s
|++++++++++++++++++++++++++++++++++++++++++ | 84% ~09s
|+++++++++++++++++++++++++++++++++++++++++++ | 85% ~09s
|+++++++++++++++++++++++++++++++++++++++++++ | 86% ~08s
|++++++++++++++++++++++++++++++++++++++++++++ | 87% ~07s
|++++++++++++++++++++++++++++++++++++++++++++ | 88% ~07s
|+++++++++++++++++++++++++++++++++++++++++++++ | 89% ~06s
|+++++++++++++++++++++++++++++++++++++++++++++ | 90% ~06s
|++++++++++++++++++++++++++++++++++++++++++++++ | 91% ~05s
|++++++++++++++++++++++++++++++++++++++++++++++ | 92% ~05s
|+++++++++++++++++++++++++++++++++++++++++++++++ | 93% ~04s
|+++++++++++++++++++++++++++++++++++++++++++++++ | 94% ~03s
|++++++++++++++++++++++++++++++++++++++++++++++++ | 95% ~03s
|++++++++++++++++++++++++++++++++++++++++++++++++ | 96% ~02s
|+++++++++++++++++++++++++++++++++++++++++++++++++ | 97% ~02s
|+++++++++++++++++++++++++++++++++++++++++++++++++ | 98% ~01s
|++++++++++++++++++++++++++++++++++++++++++++++++++| 99% ~01s
|++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed = 57s
| | 0 % ~calculating
|+ | 1 % ~23m 10s
|+ | 2 % ~27m 43s
|++ | 3 % ~21m 11s
|++ | 4 % ~17m 09s
|+++ | 5 % ~14m 00s
|+++ | 6 % ~11m 53s
|++++ | 7 % ~10m 26s
|++++ | 8 % ~09m 05s
|+++++ | 9 % ~08m 03s
|+++++ | 10% ~07m 15s
|++++++ | 11% ~06m 34s
|++++++ | 12% ~05m 59s
|+++++++ | 13% ~05m 30s
|+++++++ | 14% ~05m 21s
|++++++++ | 15% ~04m 59s
|++++++++ | 16% ~04m 38s
|+++++++++ | 17% ~04m 21s
|+++++++++ | 18% ~04m 04s
|++++++++++ | 19% ~03m 50s
|++++++++++ | 20% ~03m 36s
|+++++++++++ | 21% ~03m 24s
|+++++++++++ | 22% ~03m 15s
|++++++++++++ | 23% ~03m 06s
|++++++++++++ | 24% ~02m 57s
|+++++++++++++ | 25% ~02m 48s
|+++++++++++++ | 26% ~02m 40s
|++++++++++++++ | 27% ~02m 33s
|++++++++++++++ | 28% ~02m 27s
|+++++++++++++++ | 29% ~02m 20s
|+++++++++++++++ | 30% ~02m 15s
|++++++++++++++++ | 31% ~02m 10s
|++++++++++++++++ | 32% ~02m 04s
|+++++++++++++++++ | 33% ~01m 60s
|+++++++++++++++++ | 34% ~01m 55s
|++++++++++++++++++ | 35% ~01m 51s
|++++++++++++++++++ | 36% ~01m 46s
|+++++++++++++++++++ | 37% ~01m 42s
|+++++++++++++++++++ | 38% ~01m 38s
|++++++++++++++++++++ | 39% ~01m 35s
|++++++++++++++++++++ | 40% ~01m 31s
|+++++++++++++++++++++ | 41% ~01m 28s
|+++++++++++++++++++++ | 42% ~01m 25s
|++++++++++++++++++++++ | 43% ~01m 22s
|++++++++++++++++++++++ | 44% ~01m 19s
|+++++++++++++++++++++++ | 45% ~01m 16s
|+++++++++++++++++++++++ | 46% ~01m 13s
|++++++++++++++++++++++++ | 47% ~01m 11s
|++++++++++++++++++++++++ | 48% ~01m 08s
|+++++++++++++++++++++++++ | 49% ~01m 06s
|+++++++++++++++++++++++++ | 50% ~01m 04s
|++++++++++++++++++++++++++ | 51% ~01m 05s
|++++++++++++++++++++++++++ | 52% ~01m 03s
|+++++++++++++++++++++++++++ | 53% ~01m 00s
|+++++++++++++++++++++++++++ | 54% ~58s
|++++++++++++++++++++++++++++ | 55% ~56s
|++++++++++++++++++++++++++++ | 56% ~54s
|+++++++++++++++++++++++++++++ | 57% ~52s
|+++++++++++++++++++++++++++++ | 58% ~50s
|++++++++++++++++++++++++++++++ | 59% ~48s
|++++++++++++++++++++++++++++++ | 60% ~47s
|+++++++++++++++++++++++++++++++ | 61% ~45s
|+++++++++++++++++++++++++++++++ | 62% ~44s
|++++++++++++++++++++++++++++++++ | 63% ~42s
|++++++++++++++++++++++++++++++++ | 64% ~40s
|+++++++++++++++++++++++++++++++++ | 65% ~39s
|+++++++++++++++++++++++++++++++++ | 66% ~38s
|++++++++++++++++++++++++++++++++++ | 67% ~36s
|++++++++++++++++++++++++++++++++++ | 68% ~35s
|+++++++++++++++++++++++++++++++++++ | 69% ~33s
|+++++++++++++++++++++++++++++++++++ | 70% ~32s
|++++++++++++++++++++++++++++++++++++ | 71% ~31s
|++++++++++++++++++++++++++++++++++++ | 72% ~29s
|+++++++++++++++++++++++++++++++++++++ | 73% ~28s
|+++++++++++++++++++++++++++++++++++++ | 74% ~27s
|++++++++++++++++++++++++++++++++++++++ | 75% ~25s
|++++++++++++++++++++++++++++++++++++++ | 76% ~24s
|+++++++++++++++++++++++++++++++++++++++ | 77% ~23s
|+++++++++++++++++++++++++++++++++++++++ | 78% ~22s
|++++++++++++++++++++++++++++++++++++++++ | 79% ~21s
|++++++++++++++++++++++++++++++++++++++++ | 80% ~19s
|+++++++++++++++++++++++++++++++++++++++++ | 81% ~18s
|+++++++++++++++++++++++++++++++++++++++++ | 82% ~17s
|++++++++++++++++++++++++++++++++++++++++++ | 83% ~16s
|++++++++++++++++++++++++++++++++++++++++++ | 84% ~15s
|+++++++++++++++++++++++++++++++++++++++++++ | 85% ~14s
|+++++++++++++++++++++++++++++++++++++++++++ | 86% ~13s
|++++++++++++++++++++++++++++++++++++++++++++ | 87% ~12s
|++++++++++++++++++++++++++++++++++++++++++++ | 88% ~11s
|+++++++++++++++++++++++++++++++++++++++++++++ | 89% ~10s
|+++++++++++++++++++++++++++++++++++++++++++++ | 90% ~09s
|++++++++++++++++++++++++++++++++++++++++++++++ | 91% ~08s
|++++++++++++++++++++++++++++++++++++++++++++++ | 92% ~07s
|+++++++++++++++++++++++++++++++++++++++++++++++ | 93% ~06s
|+++++++++++++++++++++++++++++++++++++++++++++++ | 94% ~05s
|++++++++++++++++++++++++++++++++++++++++++++++++ | 95% ~04s
|++++++++++++++++++++++++++++++++++++++++++++++++ | 96% ~03s
|+++++++++++++++++++++++++++++++++++++++++++++++++ | 97% ~03s
|+++++++++++++++++++++++++++++++++++++++++++++++++ | 98% ~02s
|++++++++++++++++++++++++++++++++++++++++++++++++++| 99% ~01s
|++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed = 01m 25s
Aligning dimension 5
| | 0 % ~calculating
|+ | 1 % ~04m 41s
|+ | 2 % ~04m 09s
|++ | 3 % ~06m 53s
|++ | 4 % ~05m 36s
|+++ | 5 % ~05m 01s
|+++ | 6 % ~04m 26s
|++++ | 7 % ~03m 55s
|++++ | 8 % ~03m 41s
|+++++ | 9 % ~03m 20s
|+++++ | 10% ~03m 02s
|++++++ | 11% ~02m 54s
|++++++ | 12% ~02m 44s
|+++++++ | 13% ~02m 34s
|+++++++ | 14% ~02m 25s
|++++++++ | 15% ~02m 17s
|++++++++ | 16% ~02m 09s
|+++++++++ | 17% ~02m 02s
|+++++++++ | 18% ~01m 56s
|++++++++++ | 19% ~01m 50s
|++++++++++ | 20% ~01m 45s
|+++++++++++ | 21% ~01m 40s
|+++++++++++ | 22% ~01m 35s
|++++++++++++ | 23% ~01m 31s
|++++++++++++ | 24% ~01m 27s
|+++++++++++++ | 25% ~01m 24s
|+++++++++++++ | 26% ~01m 20s
|++++++++++++++ | 27% ~01m 18s
|++++++++++++++ | 28% ~01m 16s
|+++++++++++++++ | 29% ~01m 13s
|+++++++++++++++ | 30% ~01m 10s
|++++++++++++++++ | 31% ~01m 09s
|++++++++++++++++ | 32% ~01m 07s
|+++++++++++++++++ | 33% ~01m 05s
|+++++++++++++++++ | 34% ~01m 03s
|++++++++++++++++++ | 35% ~01m 02s
|++++++++++++++++++ | 36% ~01m 00s
|+++++++++++++++++++ | 37% ~59s
|+++++++++++++++++++ | 38% ~57s
|++++++++++++++++++++ | 39% ~55s
|++++++++++++++++++++ | 40% ~01m 11s
|+++++++++++++++++++++ | 41% ~01m 10s
|+++++++++++++++++++++ | 42% ~01m 08s
|++++++++++++++++++++++ | 43% ~01m 06s
|++++++++++++++++++++++ | 44% ~01m 04s
|+++++++++++++++++++++++ | 45% ~01m 03s
|+++++++++++++++++++++++ | 46% ~01m 02s
|++++++++++++++++++++++++ | 47% ~01m 03s
|++++++++++++++++++++++++ | 48% ~01m 01s
|+++++++++++++++++++++++++ | 49% ~59s
|+++++++++++++++++++++++++ | 50% ~57s
|++++++++++++++++++++++++++ | 51% ~56s
|++++++++++++++++++++++++++ | 52% ~54s
|+++++++++++++++++++++++++++ | 53% ~52s
|+++++++++++++++++++++++++++ | 54% ~50s
|++++++++++++++++++++++++++++ | 55% ~48s
|++++++++++++++++++++++++++++ | 56% ~47s
|+++++++++++++++++++++++++++++ | 57% ~45s
|+++++++++++++++++++++++++++++ | 58% ~43s
|++++++++++++++++++++++++++++++ | 59% ~42s
|++++++++++++++++++++++++++++++ | 60% ~40s
|+++++++++++++++++++++++++++++++ | 61% ~39s
|+++++++++++++++++++++++++++++++ | 62% ~38s
|++++++++++++++++++++++++++++++++ | 63% ~36s
|++++++++++++++++++++++++++++++++ | 64% ~35s
|+++++++++++++++++++++++++++++++++ | 65% ~34s
|+++++++++++++++++++++++++++++++++ | 66% ~32s
|++++++++++++++++++++++++++++++++++ | 67% ~31s
|++++++++++++++++++++++++++++++++++ | 68% ~30s
|+++++++++++++++++++++++++++++++++++ | 69% ~29s
|+++++++++++++++++++++++++++++++++++ | 70% ~27s
|++++++++++++++++++++++++++++++++++++ | 71% ~26s
|++++++++++++++++++++++++++++++++++++ | 72% ~25s
|+++++++++++++++++++++++++++++++++++++ | 73% ~24s
|+++++++++++++++++++++++++++++++++++++ | 74% ~23s
|++++++++++++++++++++++++++++++++++++++ | 75% ~22s
|++++++++++++++++++++++++++++++++++++++ | 76% ~21s
|+++++++++++++++++++++++++++++++++++++++ | 77% ~21s
|+++++++++++++++++++++++++++++++++++++++ | 78% ~20s
|++++++++++++++++++++++++++++++++++++++++ | 79% ~19s
|++++++++++++++++++++++++++++++++++++++++ | 80% ~18s
|+++++++++++++++++++++++++++++++++++++++++ | 81% ~17s
|+++++++++++++++++++++++++++++++++++++++++ | 82% ~16s
|++++++++++++++++++++++++++++++++++++++++++ | 83% ~15s
|++++++++++++++++++++++++++++++++++++++++++ | 84% ~14s
|+++++++++++++++++++++++++++++++++++++++++++ | 85% ~13s
|+++++++++++++++++++++++++++++++++++++++++++ | 86% ~12s
|++++++++++++++++++++++++++++++++++++++++++++ | 87% ~11s
|++++++++++++++++++++++++++++++++++++++++++++ | 88% ~11s
|+++++++++++++++++++++++++++++++++++++++++++++ | 89% ~10s
|+++++++++++++++++++++++++++++++++++++++++++++ | 90% ~09s
|++++++++++++++++++++++++++++++++++++++++++++++ | 91% ~08s
|++++++++++++++++++++++++++++++++++++++++++++++ | 92% ~07s
|+++++++++++++++++++++++++++++++++++++++++++++++ | 93% ~06s
|+++++++++++++++++++++++++++++++++++++++++++++++ | 94% ~05s
|++++++++++++++++++++++++++++++++++++++++++++++++ | 95% ~04s
|++++++++++++++++++++++++++++++++++++++++++++++++ | 96% ~03s
|+++++++++++++++++++++++++++++++++++++++++++++++++ | 97% ~03s
|+++++++++++++++++++++++++++++++++++++++++++++++++ | 98% ~02s
|++++++++++++++++++++++++++++++++++++++++++++++++++| 99% ~01s
|++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed = 01m 29s
| | 0 % ~calculating
|+ | 1 % ~14m 39s
|+ | 2 % ~14m 00s
|++ | 3 % ~10m 20s
|++ | 4 % ~08m 15s
|+++ | 5 % ~06m 57s
|+++ | 6 % ~05m 51s
|++++ | 7 % ~05m 01s
|++++ | 8 % ~04m 26s
|+++++ | 9 % ~03m 56s
|+++++ | 10% ~03m 33s
|++++++ | 11% ~03m 15s
|++++++ | 12% ~02m 60s
|+++++++ | 13% ~02m 46s
|+++++++ | 14% ~02m 43s
|++++++++ | 15% ~02m 32s
|++++++++ | 16% ~02m 22s
|+++++++++ | 17% ~02m 13s
|+++++++++ | 18% ~02m 05s
|++++++++++ | 19% ~01m 58s
|++++++++++ | 20% ~01m 51s
|+++++++++++ | 21% ~01m 45s
|+++++++++++ | 22% ~01m 40s
|++++++++++++ | 23% ~01m 35s
|++++++++++++ | 24% ~01m 30s
|+++++++++++++ | 25% ~01m 27s
|+++++++++++++ | 26% ~01m 23s
|++++++++++++++ | 27% ~01m 20s
|++++++++++++++ | 28% ~01m 16s
|+++++++++++++++ | 29% ~01m 13s
|+++++++++++++++ | 30% ~01m 10s
|++++++++++++++++ | 31% ~01m 08s
|++++++++++++++++ | 32% ~01m 05s
|+++++++++++++++++ | 33% ~01m 03s
|+++++++++++++++++ | 34% ~01m 00s
|++++++++++++++++++ | 35% ~58s
|++++++++++++++++++ | 36% ~57s
|+++++++++++++++++++ | 37% ~55s
|+++++++++++++++++++ | 38% ~54s
|++++++++++++++++++++ | 39% ~53s
|++++++++++++++++++++ | 40% ~52s
|+++++++++++++++++++++ | 41% ~52s
|+++++++++++++++++++++ | 42% ~50s
|++++++++++++++++++++++ | 43% ~49s
|++++++++++++++++++++++ | 44% ~47s
|+++++++++++++++++++++++ | 45% ~46s
|+++++++++++++++++++++++ | 46% ~44s
|++++++++++++++++++++++++ | 47% ~43s
|++++++++++++++++++++++++ | 48% ~41s
|+++++++++++++++++++++++++ | 49% ~40s
|+++++++++++++++++++++++++ | 50% ~39s
|++++++++++++++++++++++++++ | 51% ~39s
|++++++++++++++++++++++++++ | 52% ~37s
|+++++++++++++++++++++++++++ | 53% ~36s
|+++++++++++++++++++++++++++ | 54% ~35s
|++++++++++++++++++++++++++++ | 55% ~34s
|++++++++++++++++++++++++++++ | 56% ~32s
|+++++++++++++++++++++++++++++ | 57% ~31s
|+++++++++++++++++++++++++++++ | 58% ~30s
|++++++++++++++++++++++++++++++ | 59% ~29s
|++++++++++++++++++++++++++++++ | 60% ~28s
|+++++++++++++++++++++++++++++++ | 61% ~27s
|+++++++++++++++++++++++++++++++ | 62% ~26s
|++++++++++++++++++++++++++++++++ | 63% ~25s
|++++++++++++++++++++++++++++++++ | 64% ~24s
|+++++++++++++++++++++++++++++++++ | 65% ~23s
|+++++++++++++++++++++++++++++++++ | 66% ~23s
|++++++++++++++++++++++++++++++++++ | 67% ~22s
|++++++++++++++++++++++++++++++++++ | 68% ~21s
|+++++++++++++++++++++++++++++++++++ | 69% ~20s
|+++++++++++++++++++++++++++++++++++ | 70% ~19s
|++++++++++++++++++++++++++++++++++++ | 71% ~18s
|++++++++++++++++++++++++++++++++++++ | 72% ~18s
|+++++++++++++++++++++++++++++++++++++ | 73% ~17s
|+++++++++++++++++++++++++++++++++++++ | 74% ~16s
|++++++++++++++++++++++++++++++++++++++ | 75% ~16s
|++++++++++++++++++++++++++++++++++++++ | 76% ~15s
|+++++++++++++++++++++++++++++++++++++++ | 77% ~14s
|+++++++++++++++++++++++++++++++++++++++ | 78% ~14s
|++++++++++++++++++++++++++++++++++++++++ | 79% ~13s
|++++++++++++++++++++++++++++++++++++++++ | 80% ~12s
|+++++++++++++++++++++++++++++++++++++++++ | 81% ~12s
|+++++++++++++++++++++++++++++++++++++++++ | 82% ~11s
|++++++++++++++++++++++++++++++++++++++++++ | 83% ~10s
|++++++++++++++++++++++++++++++++++++++++++ | 84% ~09s
|+++++++++++++++++++++++++++++++++++++++++++ | 85% ~09s
|+++++++++++++++++++++++++++++++++++++++++++ | 86% ~08s
|++++++++++++++++++++++++++++++++++++++++++++ | 87% ~08s
|++++++++++++++++++++++++++++++++++++++++++++ | 88% ~07s
|+++++++++++++++++++++++++++++++++++++++++++++ | 89% ~07s
|+++++++++++++++++++++++++++++++++++++++++++++ | 90% ~06s
|++++++++++++++++++++++++++++++++++++++++++++++ | 91% ~06s
|++++++++++++++++++++++++++++++++++++++++++++++ | 92% ~05s
|+++++++++++++++++++++++++++++++++++++++++++++++ | 93% ~04s
|+++++++++++++++++++++++++++++++++++++++++++++++ | 94% ~04s
|++++++++++++++++++++++++++++++++++++++++++++++++ | 95% ~03s
|++++++++++++++++++++++++++++++++++++++++++++++++ | 96% ~02s
|+++++++++++++++++++++++++++++++++++++++++++++++++ | 97% ~02s
|+++++++++++++++++++++++++++++++++++++++++++++++++ | 98% ~01s
|++++++++++++++++++++++++++++++++++++++++++++++++++| 99% ~01s
|++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed = 01m 00s
Aligning dimension 6
| | 0 % ~calculating
|+ | 1 % ~07m 12s
|+ | 2 % ~04m 41s
|++ | 3 % ~03m 45s
|++ | 4 % ~03m 14s
|+++ | 5 % ~02m 49s
|+++ | 6 % ~02m 29s
|++++ | 7 % ~02m 15s
|++++ | 8 % ~02m 09s
|+++++ | 9 % ~01m 57s
|+++++ | 10% ~01m 48s
|++++++ | 11% ~01m 40s
|++++++ | 12% ~01m 33s
|+++++++ | 13% ~01m 27s
|+++++++ | 14% ~01m 21s
|++++++++ | 15% ~01m 17s
|++++++++ | 16% ~01m 13s
|+++++++++ | 17% ~01m 09s
|+++++++++ | 18% ~01m 06s
|++++++++++ | 19% ~01m 03s
|++++++++++ | 20% ~01m 00s
|+++++++++++ | 21% ~58s
|+++++++++++ | 22% ~55s
|++++++++++++ | 23% ~53s
|++++++++++++ | 24% ~51s
|+++++++++++++ | 25% ~49s
|+++++++++++++ | 26% ~47s
|++++++++++++++ | 27% ~46s
|++++++++++++++ | 28% ~44s
|+++++++++++++++ | 29% ~43s
|+++++++++++++++ | 30% ~42s
|++++++++++++++++ | 31% ~40s
|++++++++++++++++ | 32% ~40s
|+++++++++++++++++ | 33% ~39s
|+++++++++++++++++ | 34% ~38s
|++++++++++++++++++ | 35% ~37s
|++++++++++++++++++ | 36% ~36s
|+++++++++++++++++++ | 37% ~38s
|+++++++++++++++++++ | 38% ~36s
|++++++++++++++++++++ | 39% ~35s
|++++++++++++++++++++ | 40% ~34s
|+++++++++++++++++++++ | 41% ~33s
|+++++++++++++++++++++ | 42% ~32s
|++++++++++++++++++++++ | 43% ~31s
|++++++++++++++++++++++ | 44% ~30s
|+++++++++++++++++++++++ | 45% ~29s
|+++++++++++++++++++++++ | 46% ~28s
|++++++++++++++++++++++++ | 47% ~27s
|++++++++++++++++++++++++ | 48% ~27s
|+++++++++++++++++++++++++ | 49% ~26s
|+++++++++++++++++++++++++ | 50% ~25s
|++++++++++++++++++++++++++ | 51% ~24s
|++++++++++++++++++++++++++ | 52% ~24s
|+++++++++++++++++++++++++++ | 53% ~23s
|+++++++++++++++++++++++++++ | 54% ~22s
|++++++++++++++++++++++++++++ | 55% ~22s
|++++++++++++++++++++++++++++ | 56% ~21s
|+++++++++++++++++++++++++++++ | 57% ~20s
|+++++++++++++++++++++++++++++ | 58% ~20s
|++++++++++++++++++++++++++++++ | 59% ~20s
|++++++++++++++++++++++++++++++ | 60% ~19s
|+++++++++++++++++++++++++++++++ | 61% ~19s
|+++++++++++++++++++++++++++++++ | 62% ~18s
|++++++++++++++++++++++++++++++++ | 63% ~18s
|++++++++++++++++++++++++++++++++ | 64% ~17s
|+++++++++++++++++++++++++++++++++ | 65% ~17s
|+++++++++++++++++++++++++++++++++ | 66% ~16s
|++++++++++++++++++++++++++++++++++ | 67% ~16s
|++++++++++++++++++++++++++++++++++ | 68% ~15s
|+++++++++++++++++++++++++++++++++++ | 69% ~15s
|+++++++++++++++++++++++++++++++++++ | 70% ~14s
|++++++++++++++++++++++++++++++++++++ | 71% ~13s
|++++++++++++++++++++++++++++++++++++ | 72% ~13s
|+++++++++++++++++++++++++++++++++++++ | 73% ~13s
|+++++++++++++++++++++++++++++++++++++ | 74% ~13s
|++++++++++++++++++++++++++++++++++++++ | 75% ~12s
|++++++++++++++++++++++++++++++++++++++ | 76% ~12s
|+++++++++++++++++++++++++++++++++++++++ | 77% ~11s
|+++++++++++++++++++++++++++++++++++++++ | 78% ~10s
|++++++++++++++++++++++++++++++++++++++++ | 79% ~10s
|++++++++++++++++++++++++++++++++++++++++ | 80% ~09s
|+++++++++++++++++++++++++++++++++++++++++ | 81% ~09s
|+++++++++++++++++++++++++++++++++++++++++ | 82% ~08s
|++++++++++++++++++++++++++++++++++++++++++ | 83% ~08s
|++++++++++++++++++++++++++++++++++++++++++ | 84% ~07s
|+++++++++++++++++++++++++++++++++++++++++++ | 85% ~07s
|+++++++++++++++++++++++++++++++++++++++++++ | 86% ~06s
|++++++++++++++++++++++++++++++++++++++++++++ | 87% ~06s
|++++++++++++++++++++++++++++++++++++++++++++ | 88% ~05s
|+++++++++++++++++++++++++++++++++++++++++++++ | 89% ~05s
|+++++++++++++++++++++++++++++++++++++++++++++ | 90% ~05s
|++++++++++++++++++++++++++++++++++++++++++++++ | 91% ~04s
|++++++++++++++++++++++++++++++++++++++++++++++ | 92% ~04s
|+++++++++++++++++++++++++++++++++++++++++++++++ | 93% ~03s
|+++++++++++++++++++++++++++++++++++++++++++++++ | 94% ~03s
|++++++++++++++++++++++++++++++++++++++++++++++++ | 95% ~02s
|++++++++++++++++++++++++++++++++++++++++++++++++ | 96% ~02s
|+++++++++++++++++++++++++++++++++++++++++++++++++ | 97% ~01s
|+++++++++++++++++++++++++++++++++++++++++++++++++ | 98% ~01s
|++++++++++++++++++++++++++++++++++++++++++++++++++| 99% ~00s
|++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed = 44s
| | 0 % ~calculating
|+ | 1 % ~15m 27s
|+ | 2 % ~14m 28s
|++ | 3 % ~10m 36s
|++ | 4 % ~08m 25s
|+++ | 5 % ~06m 50s
|+++ | 6 % ~05m 53s
|++++ | 7 % ~05m 13s
|++++ | 8 % ~04m 35s
|+++++ | 9 % ~04m 05s
|+++++ | 10% ~03m 41s
|++++++ | 11% ~03m 21s
|++++++ | 12% ~03m 14s
|+++++++ | 13% ~02m 58s
|+++++++ | 14% ~02m 45s
|++++++++ | 15% ~02m 33s
|++++++++ | 16% ~02m 23s
|+++++++++ | 17% ~02m 14s
|+++++++++ | 18% ~02m 06s
|++++++++++ | 19% ~01m 58s
|++++++++++ | 20% ~01m 52s
|+++++++++++ | 21% ~01m 46s
|+++++++++++ | 22% ~01m 41s
|++++++++++++ | 23% ~01m 37s
|++++++++++++ | 24% ~01m 33s
|+++++++++++++ | 25% ~01m 28s
|+++++++++++++ | 26% ~01m 24s
|++++++++++++++ | 27% ~01m 21s
|++++++++++++++ | 28% ~01m 18s
|+++++++++++++++ | 29% ~01m 14s
|+++++++++++++++ | 30% ~01m 12s
|++++++++++++++++ | 31% ~01m 09s
|++++++++++++++++ | 32% ~01m 06s
|+++++++++++++++++ | 33% ~01m 04s
|+++++++++++++++++ | 34% ~01m 02s
|++++++++++++++++++ | 35% ~01m 00s
|++++++++++++++++++ | 36% ~58s
|+++++++++++++++++++ | 37% ~56s
|+++++++++++++++++++ | 38% ~54s
|++++++++++++++++++++ | 39% ~53s
|++++++++++++++++++++ | 40% ~51s
|+++++++++++++++++++++ | 41% ~49s
|+++++++++++++++++++++ | 42% ~48s
|++++++++++++++++++++++ | 43% ~46s
|++++++++++++++++++++++ | 44% ~45s
|+++++++++++++++++++++++ | 45% ~44s
|+++++++++++++++++++++++ | 46% ~42s
|++++++++++++++++++++++++ | 47% ~41s
|++++++++++++++++++++++++ | 48% ~40s
|+++++++++++++++++++++++++ | 49% ~40s
|+++++++++++++++++++++++++ | 50% ~39s
|++++++++++++++++++++++++++ | 51% ~38s
|++++++++++++++++++++++++++ | 52% ~36s
|+++++++++++++++++++++++++++ | 53% ~35s
|+++++++++++++++++++++++++++ | 54% ~34s
|++++++++++++++++++++++++++++ | 55% ~33s
|++++++++++++++++++++++++++++ | 56% ~31s
|+++++++++++++++++++++++++++++ | 57% ~30s
|+++++++++++++++++++++++++++++ | 58% ~29s
|++++++++++++++++++++++++++++++ | 59% ~28s
|++++++++++++++++++++++++++++++ | 60% ~27s
|+++++++++++++++++++++++++++++++ | 61% ~26s
|+++++++++++++++++++++++++++++++ | 62% ~26s
|++++++++++++++++++++++++++++++++ | 63% ~25s
|++++++++++++++++++++++++++++++++ | 64% ~24s
|+++++++++++++++++++++++++++++++++ | 65% ~23s
|+++++++++++++++++++++++++++++++++ | 66% ~22s
|++++++++++++++++++++++++++++++++++ | 67% ~21s
|++++++++++++++++++++++++++++++++++ | 68% ~20s
|+++++++++++++++++++++++++++++++++++ | 69% ~20s
|+++++++++++++++++++++++++++++++++++ | 70% ~19s
|++++++++++++++++++++++++++++++++++++ | 71% ~18s
|++++++++++++++++++++++++++++++++++++ | 72% ~17s
|+++++++++++++++++++++++++++++++++++++ | 73% ~17s
|+++++++++++++++++++++++++++++++++++++ | 74% ~16s
|++++++++++++++++++++++++++++++++++++++ | 75% ~15s
|++++++++++++++++++++++++++++++++++++++ | 76% ~15s
|+++++++++++++++++++++++++++++++++++++++ | 77% ~14s
|+++++++++++++++++++++++++++++++++++++++ | 78% ~13s
|++++++++++++++++++++++++++++++++++++++++ | 79% ~12s
|++++++++++++++++++++++++++++++++++++++++ | 80% ~12s
|+++++++++++++++++++++++++++++++++++++++++ | 81% ~11s
|+++++++++++++++++++++++++++++++++++++++++ | 82% ~10s
|++++++++++++++++++++++++++++++++++++++++++ | 83% ~10s
|++++++++++++++++++++++++++++++++++++++++++ | 84% ~09s
|+++++++++++++++++++++++++++++++++++++++++++ | 85% ~09s
|+++++++++++++++++++++++++++++++++++++++++++ | 86% ~08s
|++++++++++++++++++++++++++++++++++++++++++++ | 87% ~07s
|++++++++++++++++++++++++++++++++++++++++++++ | 88% ~07s
|+++++++++++++++++++++++++++++++++++++++++++++ | 89% ~06s
|+++++++++++++++++++++++++++++++++++++++++++++ | 90% ~06s
|++++++++++++++++++++++++++++++++++++++++++++++ | 91% ~05s
|++++++++++++++++++++++++++++++++++++++++++++++ | 92% ~04s
|+++++++++++++++++++++++++++++++++++++++++++++++ | 93% ~04s
|+++++++++++++++++++++++++++++++++++++++++++++++ | 94% ~03s
|++++++++++++++++++++++++++++++++++++++++++++++++ | 95% ~03s
|++++++++++++++++++++++++++++++++++++++++++++++++ | 96% ~02s
|+++++++++++++++++++++++++++++++++++++++++++++++++ | 97% ~02s
|+++++++++++++++++++++++++++++++++++++++++++++++++ | 98% ~01s
|++++++++++++++++++++++++++++++++++++++++++++++++++| 99% ~01s
|++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed = 54s
Aligning dimension 7
| | 0 % ~calculating
|+ | 1 % ~05m 07s
|+ | 2 % ~03m 38s
|++ | 3 % ~05m 43s
|++ | 4 % ~04m 42s
|+++ | 5 % ~04m 01s
|+++ | 6 % ~03m 24s
|++++ | 7 % ~03m 01s
|++++ | 8 % ~02m 46s
|+++++ | 9 % ~02m 34s
|+++++ | 10% ~02m 21s
|++++++ | 11% ~02m 09s
|++++++ | 12% ~01m 59s
|+++++++ | 13% ~01m 51s
|+++++++ | 14% ~01m 44s
|++++++++ | 15% ~01m 37s
|++++++++ | 16% ~01m 32s
|+++++++++ | 17% ~01m 27s
|+++++++++ | 18% ~01m 22s
|++++++++++ | 19% ~01m 18s
|++++++++++ | 20% ~01m 16s
|+++++++++++ | 21% ~01m 14s
|+++++++++++ | 22% ~01m 11s
|++++++++++++ | 23% ~01m 09s
|++++++++++++ | 24% ~01m 06s
|+++++++++++++ | 25% ~01m 03s
|+++++++++++++ | 26% ~01m 01s
|++++++++++++++ | 27% ~59s
|++++++++++++++ | 28% ~57s
|+++++++++++++++ | 29% ~55s
|+++++++++++++++ | 30% ~53s
|++++++++++++++++ | 31% ~51s
|++++++++++++++++ | 32% ~50s
|+++++++++++++++++ | 33% ~48s
|+++++++++++++++++ | 34% ~46s
|++++++++++++++++++ | 35% ~45s
|++++++++++++++++++ | 36% ~44s
|+++++++++++++++++++ | 37% ~43s
|+++++++++++++++++++ | 38% ~41s
|++++++++++++++++++++ | 39% ~40s
|++++++++++++++++++++ | 40% ~41s
|+++++++++++++++++++++ | 41% ~40s
|+++++++++++++++++++++ | 42% ~39s
|++++++++++++++++++++++ | 43% ~38s
|++++++++++++++++++++++ | 44% ~36s
|+++++++++++++++++++++++ | 45% ~35s
|+++++++++++++++++++++++ | 46% ~34s
|++++++++++++++++++++++++ | 47% ~33s
|++++++++++++++++++++++++ | 48% ~32s
|+++++++++++++++++++++++++ | 49% ~31s
|+++++++++++++++++++++++++ | 50% ~31s
|++++++++++++++++++++++++++ | 51% ~30s
|++++++++++++++++++++++++++ | 52% ~29s
|+++++++++++++++++++++++++++ | 53% ~29s
|+++++++++++++++++++++++++++ | 54% ~28s
|++++++++++++++++++++++++++++ | 55% ~27s
|++++++++++++++++++++++++++++ | 56% ~26s
|+++++++++++++++++++++++++++++ | 57% ~25s
|+++++++++++++++++++++++++++++ | 58% ~24s
|++++++++++++++++++++++++++++++ | 59% ~24s
|++++++++++++++++++++++++++++++ | 60% ~23s
|+++++++++++++++++++++++++++++++ | 61% ~22s
|+++++++++++++++++++++++++++++++ | 62% ~21s
|++++++++++++++++++++++++++++++++ | 63% ~21s
|++++++++++++++++++++++++++++++++ | 64% ~20s
|+++++++++++++++++++++++++++++++++ | 65% ~19s
|+++++++++++++++++++++++++++++++++ | 66% ~19s
|++++++++++++++++++++++++++++++++++ | 67% ~18s
|++++++++++++++++++++++++++++++++++ | 68% ~17s
|+++++++++++++++++++++++++++++++++++ | 69% ~16s
|+++++++++++++++++++++++++++++++++++ | 70% ~16s
|++++++++++++++++++++++++++++++++++++ | 71% ~15s
|++++++++++++++++++++++++++++++++++++ | 72% ~15s
|+++++++++++++++++++++++++++++++++++++ | 73% ~14s
|+++++++++++++++++++++++++++++++++++++ | 74% ~13s
|++++++++++++++++++++++++++++++++++++++ | 75% ~13s
|++++++++++++++++++++++++++++++++++++++ | 76% ~12s
|+++++++++++++++++++++++++++++++++++++++ | 77% ~12s
|+++++++++++++++++++++++++++++++++++++++ | 78% ~12s
|++++++++++++++++++++++++++++++++++++++++ | 79% ~11s
|++++++++++++++++++++++++++++++++++++++++ | 80% ~10s
|+++++++++++++++++++++++++++++++++++++++++ | 81% ~10s
|+++++++++++++++++++++++++++++++++++++++++ | 82% ~09s
|++++++++++++++++++++++++++++++++++++++++++ | 83% ~09s
|++++++++++++++++++++++++++++++++++++++++++ | 84% ~08s
|+++++++++++++++++++++++++++++++++++++++++++ | 85% ~07s
|+++++++++++++++++++++++++++++++++++++++++++ | 86% ~07s
|++++++++++++++++++++++++++++++++++++++++++++ | 87% ~06s
|++++++++++++++++++++++++++++++++++++++++++++ | 88% ~06s
|+++++++++++++++++++++++++++++++++++++++++++++ | 89% ~05s
|+++++++++++++++++++++++++++++++++++++++++++++ | 90% ~05s
|++++++++++++++++++++++++++++++++++++++++++++++ | 91% ~04s
|++++++++++++++++++++++++++++++++++++++++++++++ | 92% ~04s
|+++++++++++++++++++++++++++++++++++++++++++++++ | 93% ~03s
|+++++++++++++++++++++++++++++++++++++++++++++++ | 94% ~03s
|++++++++++++++++++++++++++++++++++++++++++++++++ | 95% ~02s
|++++++++++++++++++++++++++++++++++++++++++++++++ | 96% ~02s
|+++++++++++++++++++++++++++++++++++++++++++++++++ | 97% ~01s
|+++++++++++++++++++++++++++++++++++++++++++++++++ | 98% ~01s
|++++++++++++++++++++++++++++++++++++++++++++++++++| 99% ~00s
|++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed = 49s
| | 0 % ~calculating
|+ | 1 % ~09m 32s
|+ | 2 % ~05m 46s
|++ | 3 % ~04m 13s
|++ | 4 % ~03m 23s
|+++ | 5 % ~02m 54s
|+++ | 6 % ~02m 28s
|++++ | 7 % ~02m 11s
|++++ | 8 % ~01m 60s
|+++++ | 9 % ~01m 48s
|+++++ | 10% ~01m 41s
|++++++ | 11% ~01m 35s
|++++++ | 12% ~01m 29s
|+++++++ | 13% ~01m 23s
|+++++++ | 14% ~01m 18s
|++++++++ | 15% ~01m 22s
|++++++++ | 16% ~01m 17s
|+++++++++ | 17% ~01m 13s
|+++++++++ | 18% ~01m 08s
|++++++++++ | 19% ~01m 05s
|++++++++++ | 20% ~01m 01s
|+++++++++++ | 21% ~58s
|+++++++++++ | 22% ~55s
|++++++++++++ | 23% ~53s
|++++++++++++ | 24% ~50s
|+++++++++++++ | 25% ~50s
|+++++++++++++ | 26% ~49s
|++++++++++++++ | 27% ~47s
|++++++++++++++ | 28% ~46s
|+++++++++++++++ | 29% ~44s
|+++++++++++++++ | 30% ~43s
|++++++++++++++++ | 31% ~43s
|++++++++++++++++ | 32% ~42s
|+++++++++++++++++ | 33% ~41s
|+++++++++++++++++ | 34% ~40s
|++++++++++++++++++ | 35% ~39s
|++++++++++++++++++ | 36% ~38s
|+++++++++++++++++++ | 37% ~36s
|+++++++++++++++++++ | 38% ~35s
|++++++++++++++++++++ | 39% ~35s
|++++++++++++++++++++ | 40% ~34s
|+++++++++++++++++++++ | 41% ~34s
|+++++++++++++++++++++ | 42% ~33s
|++++++++++++++++++++++ | 43% ~32s
|++++++++++++++++++++++ | 44% ~31s
|+++++++++++++++++++++++ | 45% ~31s
|+++++++++++++++++++++++ | 46% ~30s
|++++++++++++++++++++++++ | 47% ~29s
|++++++++++++++++++++++++ | 48% ~28s
|+++++++++++++++++++++++++ | 49% ~28s
|+++++++++++++++++++++++++ | 50% ~27s
|++++++++++++++++++++++++++ | 51% ~26s
|++++++++++++++++++++++++++ | 52% ~26s
|+++++++++++++++++++++++++++ | 53% ~27s
|+++++++++++++++++++++++++++ | 54% ~26s
|++++++++++++++++++++++++++++ | 55% ~25s
|++++++++++++++++++++++++++++ | 56% ~24s
|+++++++++++++++++++++++++++++ | 57% ~23s
|+++++++++++++++++++++++++++++ | 58% ~22s
|++++++++++++++++++++++++++++++ | 59% ~22s
|++++++++++++++++++++++++++++++ | 60% ~21s
|+++++++++++++++++++++++++++++++ | 61% ~20s
|+++++++++++++++++++++++++++++++ | 62% ~20s
|++++++++++++++++++++++++++++++++ | 63% ~19s
|++++++++++++++++++++++++++++++++ | 64% ~18s
|+++++++++++++++++++++++++++++++++ | 65% ~18s
|+++++++++++++++++++++++++++++++++ | 66% ~17s
|++++++++++++++++++++++++++++++++++ | 67% ~17s
|++++++++++++++++++++++++++++++++++ | 68% ~16s
|+++++++++++++++++++++++++++++++++++ | 69% ~15s
|+++++++++++++++++++++++++++++++++++ | 70% ~15s
|++++++++++++++++++++++++++++++++++++ | 71% ~14s
|++++++++++++++++++++++++++++++++++++ | 72% ~14s
|+++++++++++++++++++++++++++++++++++++ | 73% ~13s
|+++++++++++++++++++++++++++++++++++++ | 74% ~13s
|++++++++++++++++++++++++++++++++++++++ | 75% ~12s
|++++++++++++++++++++++++++++++++++++++ | 76% ~12s
|+++++++++++++++++++++++++++++++++++++++ | 77% ~11s
|+++++++++++++++++++++++++++++++++++++++ | 78% ~11s
|++++++++++++++++++++++++++++++++++++++++ | 79% ~10s
|++++++++++++++++++++++++++++++++++++++++ | 80% ~10s
|+++++++++++++++++++++++++++++++++++++++++ | 81% ~09s
|+++++++++++++++++++++++++++++++++++++++++ | 82% ~09s
|++++++++++++++++++++++++++++++++++++++++++ | 83% ~08s
|++++++++++++++++++++++++++++++++++++++++++ | 84% ~08s
|+++++++++++++++++++++++++++++++++++++++++++ | 85% ~07s
|+++++++++++++++++++++++++++++++++++++++++++ | 86% ~07s
|++++++++++++++++++++++++++++++++++++++++++++ | 87% ~06s
|++++++++++++++++++++++++++++++++++++++++++++ | 88% ~06s
|+++++++++++++++++++++++++++++++++++++++++++++ | 89% ~05s
|+++++++++++++++++++++++++++++++++++++++++++++ | 90% ~05s
|++++++++++++++++++++++++++++++++++++++++++++++ | 91% ~04s
|++++++++++++++++++++++++++++++++++++++++++++++ | 92% ~04s
|+++++++++++++++++++++++++++++++++++++++++++++++ | 93% ~03s
|+++++++++++++++++++++++++++++++++++++++++++++++ | 94% ~03s
|++++++++++++++++++++++++++++++++++++++++++++++++ | 95% ~02s
|++++++++++++++++++++++++++++++++++++++++++++++++ | 96% ~02s
|+++++++++++++++++++++++++++++++++++++++++++++++++ | 97% ~01s
|+++++++++++++++++++++++++++++++++++++++++++++++++ | 98% ~01s
|++++++++++++++++++++++++++++++++++++++++++++++++++| 99% ~00s
|++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed = 47s
Aligning dimension 8
| | 0 % ~calculating
|+ | 1 % ~09m 10s
|+ | 2 % ~05m 25s
|++ | 3 % ~03m 51s
|++ | 4 % ~03m 04s
|+++ | 5 % ~02m 40s
|+++ | 6 % ~02m 24s
|++++ | 7 % ~02m 11s
|++++ | 8 % ~02m 00s
|+++++ | 9 % ~01m 54s
|+++++ | 10% ~01m 45s
|++++++ | 11% ~01m 37s
|++++++ | 12% ~01m 31s
|+++++++ | 13% ~01m 25s
|+++++++ | 14% ~01m 20s
|++++++++ | 15% ~01m 15s
|++++++++ | 16% ~01m 11s
|+++++++++ | 17% ~01m 08s
|+++++++++ | 18% ~01m 04s
|++++++++++ | 19% ~01m 02s
|++++++++++ | 20% ~60s
|+++++++++++ | 21% ~59s
|+++++++++++ | 22% ~59s
|++++++++++++ | 23% ~58s
|++++++++++++ | 24% ~57s
|+++++++++++++ | 25% ~56s
|+++++++++++++ | 26% ~55s
|++++++++++++++ | 27% ~54s
|++++++++++++++ | 28% ~53s
|+++++++++++++++ | 29% ~51s
|+++++++++++++++ | 30% ~50s
|++++++++++++++++ | 31% ~49s
|++++++++++++++++ | 32% ~48s
|+++++++++++++++++ | 33% ~48s
|+++++++++++++++++ | 34% ~47s
|++++++++++++++++++ | 35% ~46s
|++++++++++++++++++ | 36% ~45s
|+++++++++++++++++++ | 37% ~46s
|+++++++++++++++++++ | 38% ~45s
|++++++++++++++++++++ | 39% ~43s
|++++++++++++++++++++ | 40% ~42s
|+++++++++++++++++++++ | 41% ~40s
|+++++++++++++++++++++ | 42% ~39s
|++++++++++++++++++++++ | 43% ~38s
|++++++++++++++++++++++ | 44% ~37s
|+++++++++++++++++++++++ | 45% ~36s
|+++++++++++++++++++++++ | 46% ~36s
|++++++++++++++++++++++++ | 47% ~35s
|++++++++++++++++++++++++ | 48% ~34s
|+++++++++++++++++++++++++ | 49% ~33s
|+++++++++++++++++++++++++ | 50% ~32s
|++++++++++++++++++++++++++ | 51% ~32s
|++++++++++++++++++++++++++ | 52% ~31s
|+++++++++++++++++++++++++++ | 53% ~30s
|+++++++++++++++++++++++++++ | 54% ~29s
|++++++++++++++++++++++++++++ | 55% ~29s
|++++++++++++++++++++++++++++ | 56% ~28s
|+++++++++++++++++++++++++++++ | 57% ~27s
|+++++++++++++++++++++++++++++ | 58% ~26s
|++++++++++++++++++++++++++++++ | 59% ~25s
|++++++++++++++++++++++++++++++ | 60% ~25s
|+++++++++++++++++++++++++++++++ | 61% ~24s
|+++++++++++++++++++++++++++++++ | 62% ~23s
|++++++++++++++++++++++++++++++++ | 63% ~22s
|++++++++++++++++++++++++++++++++ | 64% ~21s
|+++++++++++++++++++++++++++++++++ | 65% ~21s
|+++++++++++++++++++++++++++++++++ | 66% ~20s
|++++++++++++++++++++++++++++++++++ | 67% ~19s
|++++++++++++++++++++++++++++++++++ | 68% ~19s
|+++++++++++++++++++++++++++++++++++ | 69% ~18s
|+++++++++++++++++++++++++++++++++++ | 70% ~17s
|++++++++++++++++++++++++++++++++++++ | 71% ~17s
|++++++++++++++++++++++++++++++++++++ | 72% ~16s
|+++++++++++++++++++++++++++++++++++++ | 73% ~16s
|+++++++++++++++++++++++++++++++++++++ | 74% ~16s
|++++++++++++++++++++++++++++++++++++++ | 75% ~15s
|++++++++++++++++++++++++++++++++++++++ | 76% ~14s
|+++++++++++++++++++++++++++++++++++++++ | 77% ~13s
|+++++++++++++++++++++++++++++++++++++++ | 78% ~13s
|++++++++++++++++++++++++++++++++++++++++ | 79% ~12s
|++++++++++++++++++++++++++++++++++++++++ | 80% ~11s
|+++++++++++++++++++++++++++++++++++++++++ | 81% ~11s
|+++++++++++++++++++++++++++++++++++++++++ | 82% ~10s
|++++++++++++++++++++++++++++++++++++++++++ | 83% ~10s
|++++++++++++++++++++++++++++++++++++++++++ | 84% ~09s
|+++++++++++++++++++++++++++++++++++++++++++ | 85% ~09s
|+++++++++++++++++++++++++++++++++++++++++++ | 86% ~08s
|++++++++++++++++++++++++++++++++++++++++++++ | 87% ~08s
|++++++++++++++++++++++++++++++++++++++++++++ | 88% ~07s
|+++++++++++++++++++++++++++++++++++++++++++++ | 89% ~06s
|+++++++++++++++++++++++++++++++++++++++++++++ | 90% ~06s
|++++++++++++++++++++++++++++++++++++++++++++++ | 91% ~05s
|++++++++++++++++++++++++++++++++++++++++++++++ | 92% ~05s
|+++++++++++++++++++++++++++++++++++++++++++++++ | 93% ~04s
|+++++++++++++++++++++++++++++++++++++++++++++++ | 94% ~04s
|++++++++++++++++++++++++++++++++++++++++++++++++ | 95% ~03s
|++++++++++++++++++++++++++++++++++++++++++++++++ | 96% ~02s
|+++++++++++++++++++++++++++++++++++++++++++++++++ | 97% ~02s
|+++++++++++++++++++++++++++++++++++++++++++++++++ | 98% ~01s
|++++++++++++++++++++++++++++++++++++++++++++++++++| 99% ~01s
|++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed = 58s
| | 0 % ~calculating
|+ | 1 % ~17m 18s
|+ | 2 % ~12m 56s
|++ | 3 % ~09m 55s
|++ | 4 % ~07m 60s
Find clusters using the aligned data
# Run t-SNE
immune.combined <- Seurat::RunTSNE(immune.combined, reduction.use = "cca.aligned", dims.use = 1:20, do.fast = T)
# cluster based on t-SNE space
immune.combined <- FindClusters(immune.combined, reduction.type = "cca.aligned", resolution = 0.6, dims.use = 1:20)
Computing nearest neighbor graph
Computing SNN
Modularity Optimizer version 1.3.0 by Ludo Waltman and Nees Jan van Eck
Number of nodes: 14028
Number of edges: 811477
Running Louvain algorithm...
Random start: 1
Iteration: 1
Modularity: 0.8773
Iteration: 2
Modularity: 0.8786
Iteration: 3
Modularity: 0.8786
Random start: 2
Iteration: 1
Modularity: 0.8770
Iteration: 2
Modularity: 0.8786
Iteration: 3
Modularity: 0.8786
Random start: 3
Iteration: 1
Modularity: 0.8765
Iteration: 2
Modularity: 0.8786
Iteration: 3
Modularity: 0.8786
Random start: 4
Iteration: 1
Modularity: 0.8765
Iteration: 2
Modularity: 0.8786
Iteration: 3
Modularity: 0.8786
Random start: 5
Iteration: 1
Modularity: 0.8770
Iteration: 2
Modularity: 0.8786
Iteration: 3
Modularity: 0.8786
Random start: 6
Iteration: 1
Modularity: 0.8761
Iteration: 2
Modularity: 0.8786
Iteration: 3
Modularity: 0.8786
Random start: 7
Iteration: 1
Modularity: 0.8771
Iteration: 2
Modularity: 0.8786
Iteration: 3
Modularity: 0.8786
Random start: 8
Iteration: 1
Modularity: 0.8776
Iteration: 2
Modularity: 0.8786
Iteration: 3
Modularity: 0.8786
Random start: 9
Iteration: 1
Modularity: 0.8762
Iteration: 2
Modularity: 0.8786
Iteration: 3
Modularity: 0.8786
Random start: 10
Iteration: 1
Modularity: 0.8771
Iteration: 2
Modularity: 0.8786
Iteration: 3
Modularity: 0.8786
Random start: 11
Iteration: 1
Modularity: 0.8775
Iteration: 2
Modularity: 0.8786
Iteration: 3
Modularity: 0.8786
Random start: 12
Iteration: 1
Modularity: 0.8770
Iteration: 2
Modularity: 0.8786
Iteration: 3
Modularity: 0.8786
Random start: 13
Iteration: 1
Modularity: 0.8759
Iteration: 2
Modularity: 0.8786
Iteration: 3
Modularity: 0.8786
Random start: 14
Iteration: 1
Modularity: 0.8773
Iteration: 2
Modularity: 0.8786
Iteration: 3
Modularity: 0.8786
Random start: 15
Iteration: 1
Modularity: 0.8774
Iteration: 2
Modularity: 0.8786
Iteration: 3
Modularity: 0.8786
Random start: 16
Iteration: 1
Modularity: 0.8755
Iteration: 2
Modularity: 0.8786
Iteration: 3
Modularity: 0.8786
Random start: 17
Iteration: 1
Modularity: 0.8769
Iteration: 2
Modularity: 0.8786
Iteration: 3
Modularity: 0.8786
Random start: 18
Iteration: 1
Modularity: 0.8778
Iteration: 2
Modularity: 0.8786
Iteration: 3
Modularity: 0.8786
Random start: 19
Iteration: 1
Modularity: 0.8764
Iteration: 2
Modularity: 0.8786
Iteration: 3
Modularity: 0.8786
Random start: 20
Iteration: 1
Modularity: 0.8755
Iteration: 2
Modularity: 0.8777
Iteration: 3
Modularity: 0.8777
Random start: 21
Iteration: 1
Modularity: 0.8767
Iteration: 2
Modularity: 0.8786
Iteration: 3
Modularity: 0.8786
Random start: 22
Iteration: 1
Modularity: 0.8774
Iteration: 2
Modularity: 0.8786
Iteration: 3
Modularity: 0.8786
Random start: 23
Iteration: 1
Modularity: 0.8770
Iteration: 2
Modularity: 0.8786
Iteration: 3
Modularity: 0.8786
Random start: 24
Iteration: 1
Modularity: 0.8765
Iteration: 2
Modularity: 0.8777
Iteration: 3
Modularity: 0.8777
Random start: 25
Iteration: 1
Modularity: 0.8774
Iteration: 2
Modularity: 0.8786
Iteration: 3
Modularity: 0.8786
Random start: 26
Iteration: 1
Modularity: 0.8779
Iteration: 2
Modularity: 0.8786
Iteration: 3
Modularity: 0.8786
Random start: 27
Iteration: 1
Modularity: 0.8763
Iteration: 2
Modularity: 0.8786
Iteration: 3
Modularity: 0.8786
Random start: 28
Iteration: 1
Modularity: 0.8766
Iteration: 2
Modularity: 0.8786
Iteration: 3
Modularity: 0.8786
Random start: 29
Iteration: 1
Modularity: 0.8776
Iteration: 2
Modularity: 0.8786
Iteration: 3
Modularity: 0.8786
Random start: 30
Iteration: 1
Modularity: 0.8766
Iteration: 2
Modularity: 0.8786
Iteration: 3
Modularity: 0.8786
Random start: 31
Iteration: 1
Modularity: 0.8765
Iteration: 2
Modularity: 0.8786
Iteration: 3
Modularity: 0.8786
Random start: 32
Iteration: 1
Modularity: 0.8764
Iteration: 2
Modularity: 0.8786
Iteration: 3
Modularity: 0.8786
Random start: 33
Iteration: 1
Modularity: 0.8766
Iteration: 2
Modularity: 0.8786
Iteration: 3
Modularity: 0.8786
Random start: 34
Iteration: 1
Modularity: 0.8762
Iteration: 2
Modularity: 0.8786
Iteration: 3
Modularity: 0.8786
Random start: 35
Iteration: 1
Modularity: 0.8771
Iteration: 2
Modularity: 0.8786
Iteration: 3
Modularity: 0.8786
Random start: 36
Iteration: 1
Modularity: 0.8768
Iteration: 2
Modularity: 0.8786
Iteration: 3
Modularity: 0.8786
Random start: 37
Iteration: 1
Modularity: 0.8762
Iteration: 2
Modularity: 0.8786
Iteration: 3
Modularity: 0.8786
Random start: 38
Iteration: 1
Modularity: 0.8763
Iteration: 2
Modularity: 0.8786
Iteration: 3
Modularity: 0.8786
Random start: 39
Iteration: 1
Modularity: 0.8760
Iteration: 2
Modularity: 0.8786
Iteration: 3
Modularity: 0.8786
Random start: 40
Iteration: 1
Modularity: 0.8774
Iteration: 2
Modularity: 0.8786
Iteration: 3
Modularity: 0.8786
Random start: 41
Iteration: 1
Modularity: 0.8769
Iteration: 2
Modularity: 0.8778
Iteration: 3
Modularity: 0.8778
Random start: 42
Iteration: 1
Modularity: 0.8772
Iteration: 2
Modularity: 0.8786
Iteration: 3
Modularity: 0.8786
Random start: 43
Iteration: 1
Modularity: 0.8770
Iteration: 2
Modularity: 0.8786
Iteration: 3
Modularity: 0.8786
Random start: 44
Iteration: 1
Modularity: 0.8768
Iteration: 2
Modularity: 0.8786
Iteration: 3
Modularity: 0.8786
Random start: 45
Iteration: 1
Modularity: 0.8769
Iteration: 2
Modularity: 0.8786
Iteration: 3
Modularity: 0.8786
Random start: 46
Iteration: 1
Modularity: 0.8747
Iteration: 2
Modularity: 0.8770
Iteration: 3
Modularity: 0.8770
Random start: 47
Iteration: 1
Modularity: 0.8768
Iteration: 2
Modularity: 0.8786
Iteration: 3
Modularity: 0.8786
Random start: 48
Iteration: 1
Modularity: 0.8769
Iteration: 2
Modularity: 0.8786
Iteration: 3
Modularity: 0.8786
Random start: 49
Iteration: 1
Modularity: 0.8767
Iteration: 2
Modularity: 0.8786
Iteration: 3
Modularity: 0.8786
Random start: 50
Iteration: 1
Modularity: 0.8767
Iteration: 2
Modularity: 0.8786
Iteration: 3
Modularity: 0.8786
Random start: 51
Iteration: 1
Modularity: 0.8767
Iteration: 2
Modularity: 0.8786
Iteration: 3
Modularity: 0.8786
Random start: 52
Iteration: 1
Modularity: 0.8755
Iteration: 2
Modularity: 0.8786
Iteration: 3
Modularity: 0.8786
Random start: 53
Iteration: 1
Modularity: 0.8763
Iteration: 2
Modularity: 0.8786
Iteration: 3
Modularity: 0.8786
Random start: 54
Iteration: 1
Modularity: 0.8768
Iteration: 2
Modularity: 0.8786
Iteration: 3
Modularity: 0.8786
Random start: 55
Iteration: 1
Modularity: 0.8763
Iteration: 2
Modularity: 0.8786
Iteration: 3
Modularity: 0.8786
Random start: 56
Iteration: 1
Modularity: 0.8756
Iteration: 2
Modularity: 0.8786
Iteration: 3
Modularity: 0.8786
Random start: 57
Iteration: 1
Modularity: 0.8763
Iteration: 2
Modularity: 0.8786
Iteration: 3
Modularity: 0.8786
Random start: 58
Iteration: 1
Modularity: 0.8773
Iteration: 2
Modularity: 0.8786
Iteration: 3
Modularity: 0.8786
Random start: 59
Iteration: 1
Modularity: 0.8765
Iteration: 2
Modularity: 0.8786
Iteration: 3
Modularity: 0.8786
Random start: 60
Iteration: 1
Modularity: 0.8767
Iteration: 2
Modularity: 0.8786
Iteration: 3
Modularity: 0.8786
Random start: 61
Iteration: 1
Modularity: 0.8762
Iteration: 2
Modularity: 0.8786
Iteration: 3
Modularity: 0.8786
Random start: 62
Iteration: 1
Modularity: 0.8770
Iteration: 2
Modularity: 0.8786
Iteration: 3
Modularity: 0.8786
Random start: 63
Iteration: 1
Modularity: 0.8766
Iteration: 2
Modularity: 0.8786
Iteration: 3
Modularity: 0.8786
Random start: 64
Iteration: 1
Modularity: 0.8763
Iteration: 2
Modularity: 0.8786
Iteration: 3
Modularity: 0.8786
Random start: 65
Iteration: 1
Modularity: 0.8770
Iteration: 2
Modularity: 0.8786
Iteration: 3
Modularity: 0.8786
Random start: 66
Iteration: 1
Modularity: 0.8755
Iteration: 2
Modularity: 0.8778
Iteration: 3
Modularity: 0.8778
Random start: 67
Iteration: 1
Modularity: 0.8769
Iteration: 2
Modularity: 0.8786
Iteration: 3
Modularity: 0.8786
Random start: 68
Iteration: 1
Modularity: 0.8763
Iteration: 2
Modularity: 0.8786
Iteration: 3
Modularity: 0.8786
Random start: 69
Iteration: 1
Modularity: 0.8759
Iteration: 2
Modularity: 0.8777
Iteration: 3
Modularity: 0.8777
Random start: 70
Iteration: 1
Modularity: 0.8763
Iteration: 2
Modularity: 0.8786
Iteration: 3
Modularity: 0.8786
Random start: 71
Iteration: 1
Modularity: 0.8767
Iteration: 2
Modularity: 0.8786
Iteration: 3
Modularity: 0.8786
Random start: 72
Iteration: 1
Modularity: 0.8767
Iteration: 2
Modularity: 0.8786
Iteration: 3
Modularity: 0.8786
Random start: 73
Iteration: 1
Modularity: 0.8760
Iteration: 2
Modularity: 0.8786
Iteration: 3
Modularity: 0.8786
Random start: 74
Iteration: 1
Modularity: 0.8760
Iteration: 2
Modularity: 0.8786
Iteration: 3
Modularity: 0.8786
Random start: 75
Iteration: 1
Modularity: 0.8757
Iteration: 2
Modularity: 0.8786
Iteration: 3
Modularity: 0.8786
Random start: 76
Iteration: 1
Modularity: 0.8767
Iteration: 2
Modularity: 0.8786
Iteration: 3
Modularity: 0.8786
Random start: 77
Iteration: 1
Modularity: 0.8768
Iteration: 2
Modularity: 0.8786
Iteration: 3
Modularity: 0.8786
Random start: 78
Iteration: 1
Modularity: 0.8769
Iteration: 2
Modularity: 0.8786
Iteration: 3
Modularity: 0.8786
Random start: 79
Iteration: 1
Modularity: 0.8773
Iteration: 2
Modularity: 0.8786
Iteration: 3
Modularity: 0.8786
Random start: 80
Iteration: 1
Modularity: 0.8770
Iteration: 2
Modularity: 0.8786
Iteration: 3
Modularity: 0.8786
Random start: 81
Iteration: 1
Modularity: 0.8774
Iteration: 2
Modularity: 0.8786
Iteration: 3
Modularity: 0.8786
Random start: 82
Iteration: 1
Modularity: 0.8763
Iteration: 2
Modularity: 0.8786
Iteration: 3
Modularity: 0.8786
Random start: 83
Iteration: 1
Modularity: 0.8773
Iteration: 2
Modularity: 0.8786
Iteration: 3
Modularity: 0.8786
Random start: 84
Iteration: 1
Modularity: 0.8766
Iteration: 2
Modularity: 0.8786
Iteration: 3
Modularity: 0.8786
Random start: 85
Iteration: 1
Modularity: 0.8766
Iteration: 2
Modularity: 0.8786
Iteration: 3
Modularity: 0.8786
Random start: 86
Iteration: 1
Modularity: 0.8775
Iteration: 2
Modularity: 0.8786
Iteration: 3
Modularity: 0.8786
Random start: 87
Iteration: 1
Modularity: 0.8782
Iteration: 2
Modularity: 0.8786
Iteration: 3
Modularity: 0.8786
Random start: 88
Iteration: 1
Modularity: 0.8769
Iteration: 2
Modularity: 0.8786
Iteration: 3
Modularity: 0.8786
Random start: 89
Iteration: 1
Modularity: 0.8762
Iteration: 2
Modularity: 0.8786
Iteration: 3
Modularity: 0.8786
Random start: 90
Iteration: 1
Modularity: 0.8775
Iteration: 2
Modularity: 0.8786
Iteration: 3
Modularity: 0.8786
Random start: 91
Iteration: 1
Modularity: 0.8771
Iteration: 2
Modularity: 0.8786
Iteration: 3
Modularity: 0.8786
Random start: 92
Iteration: 1
Modularity: 0.8773
Iteration: 2
Modularity: 0.8786
Iteration: 3
Modularity: 0.8786
Random start: 93
Iteration: 1
Modularity: 0.8768
Iteration: 2
Modularity: 0.8786
Iteration: 3
Modularity: 0.8786
Random start: 94
Iteration: 1
Modularity: 0.8762
Iteration: 2
Modularity: 0.8786
Iteration: 3
Modularity: 0.8786
Random start: 95
Iteration: 1
Modularity: 0.8761
Iteration: 2
Modularity: 0.8786
Iteration: 3
Modularity: 0.8786
Random start: 96
Iteration: 1
Modularity: 0.8762
Iteration: 2
Modularity: 0.8786
Iteration: 3
Modularity: 0.8786
Random start: 97
Iteration: 1
Modularity: 0.8759
Iteration: 2
Modularity: 0.8786
Iteration: 3
Modularity: 0.8786
Random start: 98
Iteration: 1
Modularity: 0.8767
Iteration: 2
Modularity: 0.8786
Iteration: 3
Modularity: 0.8786
Random start: 99
Iteration: 1
Modularity: 0.8773
Iteration: 2
Modularity: 0.8786
Iteration: 3
Modularity: 0.8786
Random start: 100
Iteration: 1
Modularity: 0.8767
Iteration: 2
Modularity: 0.8786
Iteration: 3
Modularity: 0.8786
Maximum modularity in 100 random starts: 0.8786
Number of communities: 13
Elapsed time: 65 seconds
# Visualize the dataset alignment and combined clustering results on t-SNE
p1 <- TSNEPlot(immune.combined, do.return = T, pt.size = 0.5, group.by = "stim")
p2 <- TSNEPlot(immune.combined, do.label = T, do.return = T, pt.size = 0.5)
plot_grid(p1, p2)
Differential gene expression of markers conserved across conditions
# Identify conserved cell type markers
# Conserved cell type makres are those that identify a particular cell type in both control pbmc and stimulated pbmc). The FindConservedmarkers function uses differential gene expression analysis to do this.
# As an example, let's look for markers that are conserved between control and stimulated cells in cluster 7, defined in the "ident.1" argument.
cluster7.markers <- FindConservedMarkers(immune.combined, ident.1 = 7, grouping.var = "stim", print.bar = FALSE)
Testing 7_CTRL vs 0_CTRL, 1_CTRL, 2_CTRL, 3_CTRL, 4_CTRL, 5_CTRL, 6_CTRL, 8_CTRL, 9_CTRL, 10_CTRL, 11_CTRL, 12_CTRL
the condition has length > 1 and only the first element will be usedTesting 7_STIM vs 0_STIM, 1_STIM, 2_STIM, 3_STIM, 4_STIM, 5_STIM, 6_STIM, 8_STIM, 9_STIM, 10_STIM, 11_STIM, 12_STIM
the condition has length > 1 and only the first element will be used
# view the first few markers
cluster7.markers[1:9,]
CTRL_p_val CTRL_avg_logFC CTRL_pct.1 CTRL_pct.2 CTRL_p_val_adj STIM_p_val
GNLY 0 4.120640 0.940 0.044 0 0.000000e+00
NKG7 0 3.165247 0.956 0.082 0 0.000000e+00
GZMB 0 2.893528 0.840 0.041 0 0.000000e+00
CLIC3 0 2.392040 0.597 0.023 0 0.000000e+00
FGFBP2 0 2.191768 0.494 0.020 0 3.993554e-169
CTSW 0 2.056329 0.528 0.029 0 0.000000e+00
KLRD1 0 1.874635 0.484 0.019 0 0.000000e+00
PRF1 0 1.843356 0.440 0.015 0 0.000000e+00
KLRC1 0 1.746048 0.362 0.004 0 0.000000e+00
STIM_avg_logFC STIM_pct.1 STIM_pct.2 STIM_p_val_adj max_pval minimump_p_val
GNLY 4.054550 0.955 0.058 0.000000e+00 0.000000e+00 0
NKG7 2.880317 0.958 0.079 0.000000e+00 0.000000e+00 0
GZMB 3.105637 0.898 0.058 0.000000e+00 0.000000e+00 0
CLIC3 2.396199 0.602 0.031 0.000000e+00 0.000000e+00 0
FGFBP2 1.493750 0.260 0.015 5.612141e-165 3.993554e-169 0
CTSW 2.139834 0.578 0.035 0.000000e+00 0.000000e+00 0
KLRD1 1.988682 0.560 0.026 0.000000e+00 0.000000e+00 0
PRF1 2.801957 0.850 0.056 0.000000e+00 0.000000e+00 0
KLRC1 1.689936 0.356 0.006 0.000000e+00 0.000000e+00 0
# Confirm that those markers for cluster 7 identified fall into that location on t-SNE.
FeaturePlot(object = immune.combined, features.plot = rownames(cluster7.markers)[1:9], min.cutoff = "q9", cols.use = c("lightgrey", "blue"), pt.size = 0.5)

# Based on those results, what do you think that cell type is cluster 7?
# Explore markers of different immune cell populations to try to identify what cell type each cluster contains. Select candidates based off of prior knowledge of immune cell markers.
FeaturePlot(object = immune.combined, features.plot = c("CD3D", "SELL", "CREM", "CD8A", "GNLY", "CD79A", "FCGR3A", "CCL2", "PPBP"), min.cutoff = "q9", cols.use = c("lightgrey", "blue"), pt.size = 0.5)

# Now, you can rename your clusters as these cell names. Trust that they are correct :)
new.ident <- c("CD14 Mono", "CD4 Naive T", "CD4 Memory T", "B", "CD16 Mono",
"T activated", "CD8 T", "NK", "DC", "B activated", "Mk", "pDC", "Eryth")
for (i in 0:12) {
immune.combined <- RenameIdent(object = immune.combined, old.ident.name = i,
new.ident.name = new.ident[i + 1])
}
# Run t-SNE to see your new cluster names
TSNEPlot(immune.combined, do.label = T, pt.size = 0.5)

# use SPlitDotPlotGG to plot markers of each cell type (using prior knowledge again).
immune.combined@ident <- factor(immune.combined@ident, levels = (c("pDC", "Eryth",
"Mk", "DC", "CD14 Mono", "CD16 Mono", "B activated", "B", "CD8 T", "NK",
"T activated", "CD4 Naive T", "CD4 Memory T")))
markers.to.plot <- c("CD3D", "CREM", "HSPH1", "SELL", "GIMAP5", "CACYBP", "GNLY",
"NKG7", "CCL5", "CD8A", "MS4A1", "CD79A", "MIR155HG", "NME1", "FCGR3A",
"VMO1", "CCL2", "S100A9", "HLA-DQA1", "GPR183", "PPBP", "GNG11", "HBA2",
"HBB", "TSPAN13", "IL3RA", "IGJ")
sdp <- SplitDotPlotGG(immune.combined, genes.plot = rev(markers.to.plot), cols.use = c("blue",
"red"), x.lab.rot = T, plot.legend = T, dot.scale = 8, do.return = T, grouping.var = "stim")

Differential gene expression of markers that change across conditions (ctrl vs stimulated).
# It's great that we can identify conserved markers across datasets because it allows us to be confident that we have identified subpopulations of cell types that are present in both datasets, ctrl vs stimulated. However, what is really interesting is what CHANGES when you stimulate the cells. Let's find out.
# First we need to define some plotting functions to make labeling easier. Don't worry about trying to understand what each line is doing, it is not interesting. Just run it!
LabelPoint <- function(plot, genes, exp.mat, adj.x.t = 0, adj.y.t = 0, adj.x.s = 0,
adj.y.s = 0, text.size = 2.5, segment.size = 0.1) {
for (i in genes) {
x1 <- exp.mat[i, 1]
y1 <- exp.mat[i, 2]
plot <- plot + annotate("text", x = x1 + adj.x.t, y = y1 + adj.y.t,
label = i, size = text.size)
plot <- plot + annotate("segment", x = x1 + adj.x.s, xend = x1, y = y1 +
adj.y.s, yend = y1, size = segment.size)
}
return(plot)
}
LabelUR <- function(plot, genes, exp.mat, adj.u.t = 0.1, adj.r.t = 0.15, adj.u.s = 0.05,
adj.r.s = 0.05, ...) {
return(LabelPoint(plot, genes, exp.mat, adj.y.t = adj.u.t, adj.x.t = adj.r.t,
adj.y.s = adj.u.s, adj.x.s = adj.r.s, ...))
}
LabelUL <- function(plot, genes, exp.mat, adj.u.t = 0.1, adj.l.t = 0.15, adj.u.s = 0.05,
adj.l.s = 0.05, ...) {
return(LabelPoint(plot, genes, exp.mat, adj.y.t = adj.u.t, adj.x.t = -adj.l.t,
adj.y.s = adj.u.s, adj.x.s = -adj.l.s, ...))
}
# Now, let's see how naive T cells respond to stimulation with interferon gamma.
t.cells <- SubsetData(immune.combined, ident.use = "CD4 Naive T", subset.raw = T)
t.cells <- SetAllIdent(t.cells, id = "stim")
avg.t.cells <- log1p(AverageExpression(t.cells, show.progress = FALSE))
avg.t.cells$gene <- rownames(avg.t.cells)
p1 <- ggplot(avg.t.cells, aes(CTRL, STIM)) + geom_point() + ggtitle("CD4 Naive T Cells")
plot(p1)

# Let's also see how CD14 monocytes respond to stimulation with interferon gamma.
cd14.mono <- SubsetData(immune.combined, ident.use = "CD14 Mono", subset.raw = T)
cd14.mono <- SetAllIdent(cd14.mono, id = "stim")
avg.cd14.mono <- log1p(AverageExpression(cd14.mono, show.progress = FALSE))
avg.cd14.mono$gene <- rownames(avg.cd14.mono)
p2 <- ggplot(avg.cd14.mono, aes(CTRL, STIM)) + geom_point() + ggtitle("CD14 Monocytes")
plot(p2)

# If you were to go in and find the genes that lie above the linear correlation, you would find these:
genes.to.label1 = c("ISG15", "LY6E", "IFI6", "ISG20", "MX1")
genes.to.label2 = c("IFIT2", "IFIT1")
genes.to.label3 = c("CXCL10", "CCL8")
# Now, plot them on the scatterplots and see where they fall. These end up being the genes that respond specifically to interferon gamma stimulation, both in naive T cells and CD14 monocytes - an interferon gamma response pathway that many cells have.
p1 <- LabelUR(p1, genes = c(genes.to.label1, genes.to.label2), avg.t.cells,
adj.u.t = 0.3, adj.u.s = 0.23)
p1 <- LabelUL(p1, genes = genes.to.label3, avg.t.cells, adj.u.t = 0.5, adj.u.s = 0.4,
adj.l.t = 0.25, adj.l.s = 0.25)
p2 <- LabelUR(p2, genes = c(genes.to.label1, genes.to.label3), avg.cd14.mono,
adj.u.t = 0.3, adj.u.s = 0.23)
p2 <- LabelUL(p2, genes = genes.to.label2, avg.cd14.mono, adj.u.t = 0.5, adj.u.s = 0.4,
adj.l.t = 0.25, adj.l.s = 0.25)
plot_grid(p1,p2)

# CD14 monocytes
CD14mono.interferon.response <- FindMarkers(immune.combined, ident.1 = "CD14 Mono_STIM", ident.2 = "CD14 Mono_CTRL", print.bar = FALSE)
head(CD14mono.interferon.response, 15)
p_val avg_logFC pct.1 pct.2 p_val_adj
CCL8 0 4.897386 0.913 0.017 0
CXCL10 0 4.786966 0.984 0.038 0
ISG15 0 4.298123 1.000 0.323 0
CXCL11 0 3.519246 0.930 0.013 0
TNFSF10 0 3.438679 0.990 0.048 0
IFIT1 0 3.382982 0.984 0.036 0
RSAD2 0 3.349975 0.990 0.049 0
IFIT3 0 3.342135 0.992 0.063 0
IFIT2 0 3.198709 0.959 0.043 0
ISG20 0 3.171134 1.000 0.231 0
APOBEC3A 0 3.157212 1.000 0.270 0
IDO1 0 3.051465 0.964 0.089 0
IFITM3 0 2.935768 1.000 0.269 0
IL1RN 0 2.820171 0.900 0.042 0
LY6E 0 2.751290 0.998 0.150 0
# CD4 naive T cells
CD4naiveT.interferon.response <- FindMarkers(immune.combined, ident.1 = "CD4 Naive T_STIM", ident.2 = "CD4 Naive T_CTRL", print.bar = FALSE)
head(CD4naiveT.interferon.response, 15)
p_val avg_logFC pct.1 pct.2 p_val_adj
ISG15 0.000000e+00 3.0651175 0.993 0.174 0.000000e+00
IFIT3 0.000000e+00 2.9217267 0.887 0.007 0.000000e+00
IFI6 0.000000e+00 2.7768472 0.947 0.072 0.000000e+00
IFIT1 0.000000e+00 2.7221775 0.842 0.012 0.000000e+00
ISG20 0.000000e+00 1.8400200 0.978 0.465 0.000000e+00
LY6E 2.400059e-307 2.0797759 0.894 0.152 3.372802e-303
MX1 3.507471e-286 2.3022993 0.813 0.066 4.929049e-282
B2M 5.455557e-241 0.4070204 1.000 1.000 7.666695e-237
IFIT2 3.036719e-209 2.1882740 0.628 0.014 4.267501e-205
OAS1 4.371224e-193 1.9781190 0.604 0.022 6.142881e-189
IFI44L 2.155848e-189 1.8638056 0.611 0.030 3.029613e-185
TNFSF10 1.888087e-177 2.0853079 0.601 0.048 2.653328e-173
MT2A 6.806170e-176 1.8121497 0.625 0.068 9.564711e-172
RSAD2 6.759420e-172 1.9724042 0.540 0.008 9.499013e-168
IRF7 1.801478e-161 1.5769915 0.615 0.080 2.531617e-157
# B cells
b.interferon.response <- FindMarkers(immune.combined, ident.1 = "B_STIM", ident.2 = "B_CTRL",
print.bar = FALSE)
head(b.interferon.response, 15)
p_val avg_logFC pct.1 pct.2 p_val_adj
ISG15 1.582786e-166 3.2354324 0.998 0.234 2.224289e-162
IFIT3 3.229570e-161 3.1188232 0.962 0.051 4.538515e-157
IFI6 8.461593e-158 2.9206823 0.958 0.080 1.189108e-153
ISG20 2.494914e-156 2.0364694 1.000 0.664 3.506103e-152
IFIT1 1.513880e-145 2.8621445 0.903 0.030 2.127456e-141
MX1 1.128702e-131 2.2776610 0.913 0.117 1.586165e-127
LY6E 6.819101e-126 2.1911529 0.893 0.140 9.582882e-122
IFIT2 1.048422e-115 2.5594080 0.790 0.037 1.473348e-111
TNFSF10 5.041031e-114 2.6288385 0.768 0.018 7.084161e-110
B2M 2.054561e-103 0.4355085 1.000 1.000 2.887275e-99
IRF7 2.581241e-101 1.8399930 0.842 0.184 3.627417e-97
PLSCR1 5.085870e-99 1.9410641 0.792 0.120 7.147173e-95
CXCL10 1.165432e-93 3.7508929 0.662 0.007 1.637782e-89
UBE2L6 2.422844e-86 1.4606622 0.854 0.306 3.404823e-82
HERC5 1.193288e-81 1.9377922 0.622 0.023 1.676927e-77
# Now visualize the top 8 fold changes for these 3 groups of cells
# FeatureHeatmap
# CD14 monocytes
FeatureHeatmap(immune.combined, features.plot = rownames(CD14mono.interferon.response)[1:8], group.by = "stim", pt.size = 0.25, key.position = "top", max.exp = 3)

# CD4 naive T cells
FeatureHeatmap(immune.combined, features.plot = rownames(CD4naiveT.interferon.response)[1:8], group.by = "stim", pt.size = 0.25, key.position = "top", max.exp = 3)

# B cells
FeatureHeatmap(immune.combined, features.plot = rownames(b.interferon.response)[1:8], group.by = "stim", pt.size = 0.25, key.position = "top", max.exp = 3)

Save the objects
# save this work and come back to it later
saveRDS(pbmc, file = paste(directory, "/pbmc_combined.rds", sep = ""))
saveRDS(stim, file = paste(directory, "/stim_combined.rds", sep = ""))
saveRDS(immune.combined, file = paste(directory, "/immune_combined.rds", sep = ""))
LS0tCnRpdGxlOiAiQ1FTIERpc2NvdmVyeSBPcml0ZW50ZWQgRGF0YSBTY2llbmNlIC0gc2NSTkEtc2VxIGRhdGEgYW5hbHlzaXMiCm91dHB1dDogaHRtbF9ub3RlYm9vawotLS0KCiMgSW50cm8KYGBge3J9CiMgQXV0aG9yOiBQYWlnZSAoU3BlbmNlcikgVmVnYSwgVmFuZGVyYmlsdCBVbml2ZXJzaXR5LCBLZW4gTGF1IGxhYgojIFRoaXMgdHV0b3JpYWwgd2FzIG1vZGlmaWVkIGZyb20gU2V1cmF0J3MgdHV0b3JpYWxzIGF2YWlsYWJsZSBhdCB0aGUgbGlua3MgYmVsb3c6CiMgaHR0cHM6Ly9zYXRpamFsYWIub3JnL3NldXJhdC9wYm1jM2tfdHV0b3JpYWwuaHRtbAojIGh0dHBzOi8vc2F0aWphbGFiLm9yZy9zZXVyYXQvaW1tdW5lX2FsaWdubWVudC5odG1sCiMgWW91IGNhbiBhbHNvIGxlYXJuIG1vcmUgYWJvdXQgdGhlIFNldXJhdCB0b29sIGJ5IHJlYWRpbmcgdGhlaXIgcGFwZXI6CiMgaHR0cHM6Ly93d3cubmF0dXJlLmNvbS9hcnRpY2xlcy9uYnQuNDA5NgpgYGAKCiMgRGF0YSBpbmZvcm1hdGlvbgpgYGB7cn0KIyBLYW5nIGV0IGFsLiwgMjAxNyAoaHR0cHM6Ly93d3cubmF0dXJlLmNvbS9hcnRpY2xlcy9uYnQuNDA0MikKIyB0byBkb3dubG9hZCBpdCwgZm9sbG93IHRoaXMgbGluazoKIyBodHRwczovL3d3dy5kcm9wYm94LmNvbS9zLzc5cTZkdHRnOHlsMjB6Zy9pbW11bmVfYWxpZ25tZW50X2V4cHJlc3Npb25fbWF0cmljZXMuemlwP2RsPTEKCiMgVGhlIGZpcnN0IGRhdGFzZXQgaXMgMTMsMDE5IFBCTUNzIChwZXJpcGhlcmFsIGJsb29kIG1vbm9udWNsZWFyIGNlbGxzKS4gIFRoZSBzZWNvbmQgaXMgMTIsODc1IHN0aW11bGF0ZWQgUEJNQ3MuCmBgYAoKIyBMZWFybmluZyBnb2FscwpgYGB7cn0KIyBXZSBoYXZlIGEgZmV3IGxlYXJuaW5nIGdvYWxzIGluIHRoaXMgc2VjdGlvbiBvZiB0aGUgYW5hbHlzaXMuICAKIyAgIDEuICBDaGVjayB0aGUgcXVhbGl0eSBvZiB5b3VyIGRhdGEgYW5kIGZpbHRlciBpdC4KIyAgIDIuICBOb3JtYWxpemUsIHNjYWxlLCBhbmQgZmluZCBoaWdobHkgdmFyaWFibGUgZ2VuZXMgKEhWR3MpLgojICAgMy4gIERpbWVuc2lvbiByZWR1Y3Rpb24uCiMgICA0LiAgRGlmZmVyZW50aWFsIGdlbmUgZXhwcmVzc2lvbi4KYGBgCgoKCgojIENhbGwgb24gdGhlIFNldXJhdCBmdW5jdGlvbgoKYGBge3J9CiMgbG9hZCBpbiB0aGUgU2V1cmF0IHBhY2thZ2UKbGlicmFyeShTZXVyYXQpCgojIHNldCB5b3VyIHdvcmtpbmcgZGlyZWN0b3J5CmRpcmVjdG9yeTwtc2V0d2QoIi9Vc2Vycy9wYWlnZXZlZ2EvRGVza3RvcC9DUVNfMjAxOF9EaXNjb3ZlcnlPcmllbnRlZERhdGFTY2llbmNlIikKCmBgYAoKCiMgTG9hZCBpbiB5b3VyIGRhdGEgYW5kIGNyZWF0ZSBTZXVyYXQgb2JqZWN0CgpgYGB7cn0KIyBsb2FkIGluIHRoZSBkYXRhCiAgIyAzNSw2MzUgcm93cyAoZ2VuZXMpCiAgIyAxMywwMTkgY2VsbHMgKG5hbWVzIGFyZSBiYXJjb2RlcykKCnBibWMuZGF0YSA8LSByZWFkLnRhYmxlKHBhc3RlKGRpcmVjdG9yeSwiL2ltbXVuZV9jb250cm9sX2V4cHJlc3Npb25fbWF0cml4LnR4dC5neiIsIHNlcCA9ICIiKSwgc2VwID0gIlx0IikKCiMgQ3JlYXRlIHRoZSBTZXVyYXQgb2JqZWN0IHdpdGggdGhlIHJhdyAobm9uLW5vcm1hbGl6ZWQgZGF0YSkuICBLZWVwIGFsbCBnZW5lcyBleHByZXNzZWQgaW4gPj0gNSBjZWxscy4gCgpwYm1jIDwtIENyZWF0ZVNldXJhdE9iamVjdChyYXcuZGF0YSA9IHBibWMuZGF0YSwgbWluLmNlbGxzID0gNSwgcHJvamVjdCA9ICJjb250cm9sX1BCTUMiKQoKIyBwYm1jQHJhdy5kYXRhCgpgYGAKCgojIEZpbHRlcmluZwoKYGBge3J9CiMgVGhlIG51bWJlciBvZiBnZW5lcyBhbmQgVU1JcyAobkdlbmUgYW5kIG5VTUkpIGFyZSBhdXRvbWF0aWNhbGx5IGNhbGN1bGF0ZWQKIyBmb3IgZXZlcnkgb2JqZWN0IGJ5IFNldXJhdC4gVXNlIHZpb2xpbiBwbG90cyB0byB2aXN1YWxpemUgbnVtYmVyIGdlbmVzIGFuZCBudW1iZXIgVU1Jcy4Kw7fDtyDiiaUKVmxuUGxvdChvYmplY3QgPSBwYm1jLCBmZWF0dXJlcy5wbG90ID0gYygibkdlbmUiLCAiblVNSSIpLCBuQ29sID0gMiwgcG9pbnQuc2l6ZS51c2UgPSAwLjAxKQoKIyBOb3RlOiBmaW5kaW5nIHRoZSBwZXJjZW50IG1pdG9jaG9uZHJpYWwgZ2VuZXMgZm9yIGEgZGF0YXNldCBpcyBhIGNvbW1vbiBRQyBtZXRyaWMsIGJ1dCwgdGhpcyBkYXRhc2V0IGlzIGFscmVhZHkgcHJlLXByb2Nlc3NlZCB0byByZW1vdmUgY2VsbHMgdGhhdCBoYXZlIG1pdG9jaG9uZHJpYWwgZ2VuZSBleHByZXNzaW9uLgpgYGAKCmBgYHtyfQojIEdlbmVQbG90IGlzIHR5cGljYWxseSB1c2VkIHRvIHZpc3VhbGl6ZSBnZW5lLWdlbmUgcmVsYXRpb25zaGlwcywgYnV0IGNhbiBiZSB1c2VkIHRvIHNlZSBob3cgYW55IHR3byB2YXJpYWJsZXMgY29ycmVsYXRlLiAgV2Ugd2lsbCB1c2UgaXQgdG8gc2VlIGhvdyBudW1iZXIgVU1JcyBjb3JyZWxhdGUgdG8gbnVtYmVyIG9mIGdlbmVzLgoKIyBieSB0aGUgd2F5LCB3aGF0IHdvdWxkIGJlICJiYWQiIGFuZCB3aGF0IHdvdWxkIGJlICJnb29kIj8KCiAgICAgICMgYmFkID0gbG93IG5HZW5lIHdpdGggaGlnaCBuVU1JID0+IG1lYW5zIHRoZXJlIGFyZSBmZXcgdHlwZXMgb2YgZ2VuZXMgd2l0aCBoaWdoIGV4cHJlc3Npb24KICAgICAgIyBnb29kID0gbGluZWFyIGNvcnJlbGF0aW9uIG5HZW5lIHRvIG5VTUksIHdpdGggblVNSSBhYm91dCAzLTVYIGdyZWF0ZXIgdGhhbiBuR2VuZQoKR2VuZVBsb3Qob2JqZWN0ID0gcGJtYywgZ2VuZTEgPSAiblVNSSIsIGdlbmUyID0gIm5HZW5lIikKCiMgTm90ZTogaWYgeW91J3JlIHRyeWluZyB0byByZW1vdmUgY2VsbHMgZXhwcmVzc2luZyBoaWdoICUgbWl0b2Nob25kcmlhbCBnZW5lcywgcGxvdCBuVU1JIHRvICUgbWl0byBhbmQgUUMgZnJvbSB0aGVyZS4KYGBgCgpgYGB7cn0KIyBCYXNlZCBvbiB0aGUgdmlvbGluIHBsb3QsIGZpbHRlciBvdXQgY2VsbHMgYnkgY2hvb3NpbmcgbG93IGFuZCBoaWdoIHRocmVzaG9sZHMuCiAgIyBnZXQgcmlkIG9mIGNlbGxzIHdpdGggdmVyeSBmZXcgbkdlbmVzIG9yIHdheSB0b28gbWFueSBuR2VuZQoKcGJtYyA8LSBGaWx0ZXJDZWxscyhvYmplY3QgPSBwYm1jLCBzdWJzZXQubmFtZXMgPSAibkdlbmUiLCBsb3cudGhyZXNob2xkcyA9IDIwMCwgaGlnaC50aHJlc2hvbGRzID0gMTgwMCkKCiMgaWYgeW91IHdlcmUgcmVtb3ZpbmcgY2VsbHMgd2l0aCBoaWdoICUgbWl0byBleHByZXNzaW9uLCByZW1vdmUgdGhlbSBoZXJlIHdpdGggYXBwcm9wcmlhdGUgdGhyZXNob2xkcy4KCiMgcGJtY0ByYXcuZGF0YQpgYGAKCgoKIyBOb3JtYWxpemF0aW9uCgpgYGB7cn0KIyBOb3JtYWxpemUgdGhlIGRhdGEgLSBsb2cgbm9ybWFsaXphdGlvbiBpcyBkZWZhdWx0LgoKcGJtYyA8LSBOb3JtYWxpemVEYXRhKG9iamVjdCA9IHBibWMpCgojIHBibWNAZGF0YQpgYGAKCiMgRmluZCBoaWdobHkgdmFyaWFibGUgZ2VuZXMgKEhWR3MpCgpgYGB7cn0KIyBGaW5kIHRoZSB0b3AgMSwwMDAgbW9zdCB2YXJpYWJsZSBnZW5lcwogICMgaWRlbnRpZmllcyBvdXRsaWVycyBvbiBhICdtZWFuIHZhcmlhYmlsaXR5IHBsb3QnLCB3aXRoIG1lYW4gZXhwcmVzc2lvbiBvbiB0aGUgeC1heGlzIGFuZCAgICAgICAjIGRpc3BlcnNpb24gb24gdGhlIHktYXhpcy4gQ29ycmVjdHMgZm9yIHRoZSBkZXBlbmRlbmNlIG9uIHRoZSBhdmVyYWdlIGV4cHJlc3Npb24gYnkgdXNpbmcKICAjIGJpbm5pbmcuICBTZWUgP0ZpbmRWYXJpYWJsZUdlbmVzIGZvciBkZXRhaWxzLgoKcGJtYyA8LSBGaW5kVmFyaWFibGVHZW5lcyhwYm1jKQoKIyBwYm1jQHZhci5nZW5lcyAjIGNvbnRhaW5zIHZhcmlhYmxlIGdlbmVzCiMgcGJtY0BodmcuaW5mbyAgIyBjb250YWlucyByZXN1bHRzIG9mIEhWRyBhbmFseXNpcwpgYGAKCiMgU2NhbGUgZGF0YQoKYGBge3J9CiMgcmVtb3ZlcyAidW5pbnRlcmVzdGluZyBzb3VyY2VzIG9mIHZhcmlhdGlvbiIsIGxpa2UgdGVjaG5pY2FsIG5vaXNlLCBvciBjZWxsIGN5Y2xlCiMgbGluZWFyIHJlZ3Jlc3Npb24gdG8gcHJlZGljdCBnZW5lIGV4cHJlc3Npb24uIFNlZSA/U2NhbGVEYXRhIGZvciBtb3JlIGluZm9ybWF0aW9uLgoKcGJtYyA8LSBTY2FsZURhdGEocGJtYykKCiMgcGJtY0BzY2FsZS5kYXRhCmBgYAoKIyBEaW1lbnNpb25hbGl0eSByZWR1Y3Rpb24gKFBDQSkKCmBgYHtyfQojIFJ1biBQQ0EgdXNpbmcgdGhlIEhWR3MKCnBibWMgPC0gUnVuUENBKG9iamVjdCA9IHBibWMsIHBjLmdlbmVzID0gcGJtY0B2YXIuZ2VuZXMsIHBjcy5jb21wdXRlID0gMzAsIGRvLnByaW50ID0gRkFMU0UpCgojIHBibWNAZHIkcGNhCgpgYGAKCiMgQ2hvb3NlIFBDcwoKYGBge3J9CiMgUHJpbmNpcGxlIGNvbXBvbmVudHMgKFBDcykgY2FwdHVyZSB0aGUgdmFyaWFiaWxpdHkgaW4geW91ciBkYXRhc2V0LiAgQWx0aG91Z2ggd2Ugc3BlY2lmaWVkIDMwIFBDcywgd2Ugd2FudCB0byB1c2Ugb25seSB0aGUgUENzIHRoYXQgY2FwdHVyZSB2YXJpYWJpbGl0eSBhbmQgZGlzY2FyZCB0aGUgcmVzdCBmb3IgZG93bnN0cmVhbSBhbmFseXNlcy4gIFlvdSBsb29rIGZvciBzYXR1cmF0aW9uIChmbGF0bGluZSkgaW4gdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHRoZSBudW1iZXIgb2YgcHJpbmNpcGxlIGNvbXBvbmVudHMgYW5kIHRoZSBwZXJjZW50YWdlIG9mIHRoZSB2YXJpYW5jZSBleHBsYWluZWQuCgojIDMgd2F5cyB0byBsb29rIGF0IFBDcy4uLgoKIyAxLiBFbGJvdyBwbG90IG9mIHByaW5jaXBhbCBjb21wb25lbnRzClBDRWxib3dQbG90KG9iamVjdCA9IHBibWMsIG51bS5wYyA9IDMwKQoKIyAyLiBIZWF0bWFwIG9mIGluZGl2aWR1YWwgUENzClBDSGVhdG1hcChvYmplY3QgPSBwYm1jLCBwYy51c2UgPSAxOjE1LCBjZWxscy51c2UgPSA1MDAsIGRvLmJhbGFuY2VkID0gVFJVRSwgbGFiZWwuY29sdW1uID0gRkFMU0UsIHVzZS5mdWxsID0gRkFMU0UpCgpQQ0hlYXRtYXAob2JqZWN0ID0gcGJtYywgcGMudXNlID0gMTY6MzAsIGNlbGxzLnVzZSA9IDUwMCwgZG8uYmFsYW5jZWQgPSBUUlVFLCBsYWJlbC5jb2x1bW4gPSBGQUxTRSwgdXNlLmZ1bGwgPSBGQUxTRSkKCiMgMy4gSmFja3N0cmF3IHBhY2thZ2UgdG8gZGV0ZXJtaW5lIHN0YXRpc3RpY2FsbHkgc2lnbmlmaWNhbnQgcHJpbmNpcGFsIGNvbXBvbmVudHMKcGJtYyA8LSBKYWNrU3RyYXcob2JqZWN0ID0gcGJtYywgbnVtLnBjID0gMzAsIG51bS5yZXBsaWNhdGUgPSAxMDAsIGRpc3BsYXkucHJvZ3Jlc3MgPSBUUlVFKQpKYWNrU3RyYXdQbG90KG9iamVjdCA9IHBibWMsIFBDcyA9IDE6MzApCgpgYGAKCiMgVXNlIFBDcyB0byBjbHVzdGVyIGFuZCB2aXN1YWxpemUgY2x1c3RlcmluZyB3aXRoIHQtU05FCgpgYGB7cn0KIyBDbHVzdGVyaW5nIHVzaW5nIFNldXJhdCdzIG1ldGhvZC4gU2VlIG1vcmUgaW5mbyBpbiA/RmluZENsdXN0ZXJzLgogICMgc3BlY2lmeSB0aGUgbnVtYmVyIG9mIFBDcyB1c2luZyBkaW1zLnVzZQoKcGJtYyA8LSBGaW5kQ2x1c3RlcnMob2JqZWN0ID0gcGJtYywgcmVkdWN0aW9uLnR5cGUgPSAicGNhIiwgZGltcy51c2UgPSAxOjIwLCByZXNvbHV0aW9uID0gMC42LAogICAgICAgICAgICAgICAgICAgICBwcmludC5vdXRwdXQgPSAwLCBzYXZlLlNOTiA9IFRSVUUpCiMgcGJtY0BpZGVudAoKIyBSdW4gZGltZW5zaW9uIHJlZHVjdGlvbiAodC1TTkUpIHRvIHZpc3VhbGl6ZSB0aGUgY2x1c3RlcmluZwpwYm1jIDwtIFNldXJhdDo6UnVuVFNORShvYmplY3QgPSBwYm1jLCBkaW1zLnVzZSA9IDE6MjAsIGRvLmZhc3QgPSBUUlVFKQoKVFNORVBsb3Qob2JqZWN0ID0gcGJtYykKCmBgYAoKCiMgRGlmZmVyZW50aWFsIGdlbmUgZXhwcmVzc2lvbiAtIG9uZSBjbHVzdGVyIGF0IGEgdGltZQoKYGBge3J9CiMgY2x1c3RlciAxIHZzIGFsbCBvdGhlciBjbHVzdGVycyBwb29sZWQgdG9nZXRoZXIKY2x1c3RlcjEubWFya2VycyA8LSBGaW5kTWFya2VycyhvYmplY3QgPSBwYm1jLCBpZGVudC4xID0gMSwgbWluLnBjdCA9IDAuMjUpCnByaW50KHggPSBoZWFkKHggPSBjbHVzdGVyMS5tYXJrZXJzLCBuID01KSkKCiMgY2x1c3RlciAxIHZzIGNsdXN0ZXIgNCBhbmQgNQpjbHVzdGVyMS5tYXJrZXJzLjUgPC0gRmluZE1hcmtlcnMob2JqZWN0ID0gcGJtYywgaWRlbnQuMSA9IDEsIGlkZW50LjIgPSA1LCBtaW4ucGN0ID0gMC4yNSkKcHJpbnQoeCA9IGhlYWQoeCA9IGNsdXN0ZXIxLm1hcmtlcnMuNSwgbiA9NSkpCgoKYGBgCgojIERpZmZlcmVudGlhbCBnZW5lIGV4cHJlc3Npb24gLSBpdGVyYXRlIHRocm91Z2ggYWxsIGNsdXN0ZXJzCgpgYGB7cn0KIyBGaW5kIG1hcmtlcnMgZm9yIGV2ZXJ5IGNsdXN0ZXIgY29tcGFyZWQgdG8gYWxsIHJlbWFpbmluZyBjZWxscywgcmVwb3J0IG9ubHkgcG9zaXRpdmUgb25lcwpwYm1jLm1hcmtlcnMgPC0gRmluZEFsbE1hcmtlcnMob2JqZWN0ID0gcGJtYywgb25seS5wb3MgPSBUUlVFLCBtaW4ucGN0ID0gMC4yNSwgdGhyZXNoLnVzZSA9IDAuMjUpCgojIGNhbGwgbGlicmFyeSBkcGx5ciB0byB1c2Ugc29tZSBvZiBpdHMgZnVuY3Rpb25zCmxpYnJhcnkoZHBseXIpCiMgZ3JvdXAgYnkgY2x1c3RlciB1c2luZyBncm91cF9ieSBmdW5jdGlvbiBhbmQgc2hvdyB0b3AgNSByZXN1bHRzIHVzaW5nIHRvcF9uIGZ1bmN0aW9uCnBibWMubWFya2Vycy5ncm91cGVkIDwtIGdyb3VwX2J5KHBibWMubWFya2VycywgY2x1c3RlcikKcGJtYy5tYXJrZXJzLmdyb3VwZWQudG9wIDwtIHRvcF9uKHBibWMubWFya2Vycy5ncm91cGVkLCA1LCBhdmdfbG9nRkMpCiMgY29udmVydCBpdCB0byBhIG1hdHJpeCBmb3IgZG93bnN0cmVhbSBhcHBsaWNhdGlvbnMgKHRydXN0IG1lKQpwYm1jLm1hcmtlcnMuZ3JvdXBlZC50b3AgPC0gYXMubWF0cml4KHBibWMubWFya2Vycy5ncm91cGVkLnRvcCkKcHJpbnQocGJtYy5tYXJrZXJzLmdyb3VwZWQudG9wKQoKIyBXaGF0IGFib3V0IHVzaW5nIGEgZGlmZmVyZW50IHRlc3Q/ICBPbiB5b3VyIG93biB0aW1lLCB0cnlpbmcgYWRkaW5nIHRoZSBhcmd1bWVudCB0ZXN0LnVzZSA9ICJyb2MiIGFuZCBzZWUgaG93IGRpZmZlcmVudCB5b3VyIHJlc3VsdHMgYXJlLiAKYGBgCgoKIyBWaXN1YWxpemUgZGlmZmVyZW50aWFsbHkgZXhwcmVzc2VkIGdlbmVzCgpgYGB7cn0KIyBUaGUgbGlzdCBvZiBERSBnZW5lcyBpcyBsb25nIGFuZCBpdCB3b3VsZCBiZSB0b28gbXVjaCBpbmZvcm1hdGlvbiB0byB2aXN1YWxpemUgdGhlbSBhbGwuIFNvLCBsZXQncyBwbG90IHRoZSB0b3AgNSBmZWF0dXJlcyAoZ2VuZXMpIGZvciBlYWNoIGNsdXN0ZXIuICBZb3UgY291bGQgZG8gdGhpcyB1c2luZyBhIGZvciBsb29wLCBidXQgbGV0J3Mga2VlcCBpdCBzaW1wbGUuCgojIEZpcnN0LCBpc29sYXRlIHRoZSB0b3AgNSBERSBnZW5lcyBmb3IgZWFjaCBjbHVzdGVyLgpjbHVzdGVyXzAgPC0gd2hpY2gocGJtYy5tYXJrZXJzLmdyb3VwZWQudG9wWywiY2x1c3RlciJdID09IDApCmNsdXN0ZXJfMSA8LSB3aGljaChwYm1jLm1hcmtlcnMuZ3JvdXBlZC50b3BbLCJjbHVzdGVyIl0gPT0gMSkKY2x1c3Rlcl8yIDwtIHdoaWNoKHBibWMubWFya2Vycy5ncm91cGVkLnRvcFssImNsdXN0ZXIiXSA9PSAyKQpjbHVzdGVyXzMgPC0gd2hpY2gocGJtYy5tYXJrZXJzLmdyb3VwZWQudG9wWywiY2x1c3RlciJdID09IDMpCmNsdXN0ZXJfNCA8LSB3aGljaChwYm1jLm1hcmtlcnMuZ3JvdXBlZC50b3BbLCJjbHVzdGVyIl0gPT0gNCkKY2x1c3Rlcl81IDwtIHdoaWNoKHBibWMubWFya2Vycy5ncm91cGVkLnRvcFssImNsdXN0ZXIiXSA9PSA1KQpjbHVzdGVyXzYgPC0gd2hpY2gocGJtYy5tYXJrZXJzLmdyb3VwZWQudG9wWywiY2x1c3RlciJdID09IDYpCmNsdXN0ZXJfNyA8LSB3aGljaChwYm1jLm1hcmtlcnMuZ3JvdXBlZC50b3BbLCJjbHVzdGVyIl0gPT0gNykKY2x1c3Rlcl84IDwtIHdoaWNoKHBibWMubWFya2Vycy5ncm91cGVkLnRvcFssImNsdXN0ZXIiXSA9PSA4KQpjbHVzdGVyXzkgPC0gd2hpY2gocGJtYy5tYXJrZXJzLmdyb3VwZWQudG9wWywiY2x1c3RlciJdID09IDkpCmNsdXN0ZXJfMTAgPC0gd2hpY2gocGJtYy5tYXJrZXJzLmdyb3VwZWQudG9wWywiY2x1c3RlciJdID09IDEwKQoKCiMgMyBvcHRpb25zIGZvciB2aXN1YWxpemF0aW9uLi4uCgojIDEuIFZpb2xpbiBwbG90cwojIGlmIHlvdSB3YW50IHRvIHNlZSB0aGUgcG9pbnRzLCBpbnNlcnQgcG9pbnQuc2l6ZS51c2UgPSAwLjEgaW50byB0aGUgYXJndW1lbnQgbGlzdAoKIyAjIHNwZWNpZnkgY2x1c3RlciAwIGhlcmUKVmxuUGxvdChvYmplY3QgPSBwYm1jLCBmZWF0dXJlcy5wbG90ID0gcGJtYy5tYXJrZXJzLmdyb3VwZWQudG9wW2NsdXN0ZXJfMCwgImdlbmUiXSwKICAgICAgICBwb2ludC5zaXplLnVzZSA9IDApCiMgIyBzcGVjaWZ5IGNsdXN0ZXIgMSBoZXJlClZsblBsb3Qob2JqZWN0ID0gcGJtYywgZmVhdHVyZXMucGxvdCA9IHBibWMubWFya2Vycy5ncm91cGVkLnRvcFtjbHVzdGVyXzEsICJnZW5lIl0sCiAgICAgICAgcG9pbnQuc2l6ZS51c2UgPSAwKQojICMgc3BlY2lmeSBjbHVzdGVyIDIgaGVyZQpWbG5QbG90KG9iamVjdCA9IHBibWMsIGZlYXR1cmVzLnBsb3QgPSBwYm1jLm1hcmtlcnMuZ3JvdXBlZC50b3BbY2x1c3Rlcl8yLCAiZ2VuZSJdLAogICAgICAgIHBvaW50LnNpemUudXNlID0gMCkKIyAjIHNwZWNpZnkgY2x1c3RlciAzIGhlcmUKVmxuUGxvdChvYmplY3QgPSBwYm1jLCBmZWF0dXJlcy5wbG90ID0gcGJtYy5tYXJrZXJzLmdyb3VwZWQudG9wW2NsdXN0ZXJfMywgImdlbmUiXSwKICAgICAgICBwb2ludC5zaXplLnVzZSA9IDApCiMgIyBzcGVjaWZ5IGNsdXN0ZXIgNCBoZXJlClZsblBsb3Qob2JqZWN0ID0gcGJtYywgZmVhdHVyZXMucGxvdCA9IHBibWMubWFya2Vycy5ncm91cGVkLnRvcFtjbHVzdGVyXzQsICJnZW5lIl0sCiAgICAgICAgcG9pbnQuc2l6ZS51c2UgPSAwKQojICMgc3BlY2lmeSBjbHVzdGVyIDUgaGVyZQpWbG5QbG90KG9iamVjdCA9IHBibWMsIGZlYXR1cmVzLnBsb3QgPSBwYm1jLm1hcmtlcnMuZ3JvdXBlZC50b3BbY2x1c3Rlcl81LCAiZ2VuZSJdLAogICAgICAgIHBvaW50LnNpemUudXNlID0gMCkKIyAjIHNwZWNpZnkgY2x1c3RlciA2IGhlcmUKVmxuUGxvdChvYmplY3QgPSBwYm1jLCBmZWF0dXJlcy5wbG90ID0gcGJtYy5tYXJrZXJzLmdyb3VwZWQudG9wW2NsdXN0ZXJfNiwgImdlbmUiXSwKICAgICAgICBwb2ludC5zaXplLnVzZSA9IDApCiMgIyBzcGVjaWZ5IGNsdXN0ZXIgNyBoZXJlClZsblBsb3Qob2JqZWN0ID0gcGJtYywgZmVhdHVyZXMucGxvdCA9IHBibWMubWFya2Vycy5ncm91cGVkLnRvcFtjbHVzdGVyXzcsICJnZW5lIl0sCiAgICAgICAgcG9pbnQuc2l6ZS51c2UgPSAwKQojICMgc3BlY2lmeSBjbHVzdGVyIDggaGVyZQpWbG5QbG90KG9iamVjdCA9IHBibWMsIGZlYXR1cmVzLnBsb3QgPSBwYm1jLm1hcmtlcnMuZ3JvdXBlZC50b3BbY2x1c3Rlcl84LCAiZ2VuZSJdLAogICAgICAgIHBvaW50LnNpemUudXNlID0gMCkKIyAjIHNwZWNpZnkgY2x1c3RlciA5IGhlcmUKVmxuUGxvdChvYmplY3QgPSBwYm1jLCBmZWF0dXJlcy5wbG90ID0gcGJtYy5tYXJrZXJzLmdyb3VwZWQudG9wW2NsdXN0ZXJfOSwgImdlbmUiXSwKICAgICAgICBwb2ludC5zaXplLnVzZSA9IDApCiMgIyBzcGVjaWZ5IGNsdXN0ZXIgMTAgaGVyZQpWbG5QbG90KG9iamVjdCA9IHBibWMsIGZlYXR1cmVzLnBsb3QgPSBwYm1jLm1hcmtlcnMuZ3JvdXBlZC50b3BbY2x1c3Rlcl8xMCwgImdlbmUiXSwKICAgICAgICBwb2ludC5zaXplLnVzZSA9IDApCgoKCiMgMi4gRmVhdHVyZSBwbG90CiMgaGVyZSwgdXNlIHQtU05FIGZvciBkaW0gcmVkdWN0aW9uCiMgTm90ZXMgCiMgWW91IGNvdWxkIGNoYW5nZSB0aGUgcmVkdWN0aW9uLnVzZSB0byBkbyBQQ0Egb3IgSUNBIGluc3RlYWQgb2YgdC1TTkUsIGJ1dCBzaW5jZSB3ZSBrbm93IHdoZXJlIG91ciBjbHVzdGVycyB3ZXJlIG1hcHBlZCBpbiB0aGUgY29udGV4dCBvZiB0LVNORSwgdGhpcyBtYWtlcyB0aGUgbW9zdCBzZW5zZSBmb3IgdXMuCgojIENsdXN0ZXIgMApGZWF0dXJlUGxvdChvYmplY3QgPSBwYm1jLCBmZWF0dXJlcy5wbG90ID0gcGJtYy5tYXJrZXJzLmdyb3VwZWQudG9wW2NsdXN0ZXJfMCwgImdlbmUiXSwgY29scy51c2UgPSBjKCJncmV5IiwgImJsdWUiKSwgcmVkdWN0aW9uLnVzZSA9ICJ0c25lIikKIyBDbHVzdGVyIDEKRmVhdHVyZVBsb3Qob2JqZWN0ID0gcGJtYywgZmVhdHVyZXMucGxvdCA9IHBibWMubWFya2Vycy5ncm91cGVkLnRvcFtjbHVzdGVyXzEsICJnZW5lIl0sIGNvbHMudXNlID0gYygiZ3JleSIsICJibHVlIiksIHJlZHVjdGlvbi51c2UgPSAidHNuZSIpCiMgQ2x1c3RlciAyCkZlYXR1cmVQbG90KG9iamVjdCA9IHBibWMsIGZlYXR1cmVzLnBsb3QgPSBwYm1jLm1hcmtlcnMuZ3JvdXBlZC50b3BbY2x1c3Rlcl8yLCAiZ2VuZSJdLCBjb2xzLnVzZSA9IGMoImdyZXkiLCAiYmx1ZSIpLCByZWR1Y3Rpb24udXNlID0gInRzbmUiKQojIENsdXN0ZXIgMwpGZWF0dXJlUGxvdChvYmplY3QgPSBwYm1jLCBmZWF0dXJlcy5wbG90ID0gcGJtYy5tYXJrZXJzLmdyb3VwZWQudG9wW2NsdXN0ZXJfMywgImdlbmUiXSwgY29scy51c2UgPSBjKCJncmV5IiwgImJsdWUiKSwgcmVkdWN0aW9uLnVzZSA9ICJ0c25lIikKIyBDbHVzdGVyIDQKRmVhdHVyZVBsb3Qob2JqZWN0ID0gcGJtYywgZmVhdHVyZXMucGxvdCA9IHBibWMubWFya2Vycy5ncm91cGVkLnRvcFtjbHVzdGVyXzQsICJnZW5lIl0sIGNvbHMudXNlID0gYygiZ3JleSIsICJibHVlIiksIHJlZHVjdGlvbi51c2UgPSAidHNuZSIpCiMgQ2x1c3RlciA1CkZlYXR1cmVQbG90KG9iamVjdCA9IHBibWMsIGZlYXR1cmVzLnBsb3QgPSBwYm1jLm1hcmtlcnMuZ3JvdXBlZC50b3BbY2x1c3Rlcl81LCAiZ2VuZSJdLCBjb2xzLnVzZSA9IGMoImdyZXkiLCAiYmx1ZSIpLCByZWR1Y3Rpb24udXNlID0gInRzbmUiKQojIENsdXN0ZXIgNgpGZWF0dXJlUGxvdChvYmplY3QgPSBwYm1jLCBmZWF0dXJlcy5wbG90ID0gcGJtYy5tYXJrZXJzLmdyb3VwZWQudG9wW2NsdXN0ZXJfNiwgImdlbmUiXSwgY29scy51c2UgPSBjKCJncmV5IiwgImJsdWUiKSwgcmVkdWN0aW9uLnVzZSA9ICJ0c25lIikKIyBDbHVzdGVyIDcKRmVhdHVyZVBsb3Qob2JqZWN0ID0gcGJtYywgZmVhdHVyZXMucGxvdCA9IHBibWMubWFya2Vycy5ncm91cGVkLnRvcFtjbHVzdGVyXzcsICJnZW5lIl0sIGNvbHMudXNlID0gYygiZ3JleSIsICJibHVlIiksIHJlZHVjdGlvbi51c2UgPSAidHNuZSIpCiMgQ2x1c3RlciA4CkZlYXR1cmVQbG90KG9iamVjdCA9IHBibWMsIGZlYXR1cmVzLnBsb3QgPSBwYm1jLm1hcmtlcnMuZ3JvdXBlZC50b3BbY2x1c3Rlcl84LCAiZ2VuZSJdLCBjb2xzLnVzZSA9IGMoImdyZXkiLCAiYmx1ZSIpLCByZWR1Y3Rpb24udXNlID0gInRzbmUiKQojIENsdXN0ZXIgOQpGZWF0dXJlUGxvdChvYmplY3QgPSBwYm1jLCBmZWF0dXJlcy5wbG90ID0gcGJtYy5tYXJrZXJzLmdyb3VwZWQudG9wW2NsdXN0ZXJfOSwgImdlbmUiXSwgY29scy51c2UgPSBjKCJncmV5IiwgImJsdWUiKSwgcmVkdWN0aW9uLnVzZSA9ICJ0c25lIikKIyBDbHVzdGVyIDEwCkZlYXR1cmVQbG90KG9iamVjdCA9IHBibWMsIGZlYXR1cmVzLnBsb3QgPSBwYm1jLm1hcmtlcnMuZ3JvdXBlZC50b3BbY2x1c3Rlcl8xMCwgImdlbmUiXSwgY29scy51c2UgPSBjKCJncmV5IiwgImJsdWUiKSwgcmVkdWN0aW9uLnVzZSA9ICJ0c25lIikKCgojIDMuIEhlYXRtYXAKIyBIZWF0bWFwcyBoYXZlIGVub3VnaCByb29tIHRvIHNob3cgeW91IHRoZSB0b3AgNSAob3IgbW9yZSEpIGdlbmVzIGZvciBlYWNoIGNsdXN0ZXIuICBMZXQncyBkbyB0aGUgdG9wIDUsIGJ1dCBpZiB5b3UgaGF2ZSB0aW1lLCB0cnkgY2hhbmdpbmcgdGhlIHRvcCBmZWF0dXJlcyB0byAxMCBvciBtb3JlLgoKIyBBbGwgY2x1c3RlcnMKRG9IZWF0bWFwKG9iamVjdCA9IHBibWMsIGdlbmVzLnVzZSA9IHBibWMubWFya2Vycy5ncm91cGVkLnRvcFsgLCAiZ2VuZSJdLCBzbGltLmNvbC5sYWJlbCA9IFRSVUUsIHJlbW92ZS5rZXkgPSBUUlVFKQoKYGBgCgojIFNhdmUgdGhlIG9iamVjdCAKCmBgYHtyfQojIHNhdmUgdGhpcyB3b3JrIGFuZCBjb21lIGJhY2sgdG8gaXQgbGF0ZXIKCnNhdmVSRFMocGJtYywgZmlsZSA9IHBhc3RlKGRpcmVjdG9yeSwgIi9wYm1jX29ubHkucmRzIiwgc2VwID0gIiIpKQpgYGAKCgoKCiMgU1RPUFBJTkcgUE9JTlQgCgoKIyBOb3cgbGV0J3MgYWRkIGluIGEgc2Vjb25kIGRhdGFzZXQsIHdoaWNoIGlzIFBCTUNzIHN0aW11bGF0ZWQgd2l0aCBpbnRlcmZlcm9uIGdhbW1hCgpgYGB7cn0KCnN0aW0uZGF0YSA8LSByZWFkLnRhYmxlKHBhc3RlKGRpcmVjdG9yeSwgIi9pbW11bmVfc3RpbXVsYXRlZF9leHByZXNzaW9uX21hdHJpeC50eHQuZ3oiLCBzZXAgPSAiIiksIHNlcCA9ICJcdCIpCgojIGNyZWF0ZSB0aGUgU2V1cmF0IG9iamVjdCBmb3IgdGhlIHN0aW11bGF0ZWQgUEJNQ3MKc3RpbSA8LSBDcmVhdGVTZXVyYXRPYmplY3QocmF3LmRhdGEgPSBzdGltLmRhdGEsIG1pbi5jZWxscyA9IDUsIHByb2plY3QgPSAic3RpbV9QQk1DIikKCiMgQWxzbyByZS1jcmVhdGUgdGhlIGNvbnRyb2wgUEJNQyBvYmplY3QgYmVjYXVzZSB3ZSB3aWxsIGNoYW5nZSBhIGNvdXBsZSB0aGluZ3MgdGhpcyB0aW1lIGFuZCB3ZSBkb24ndCB3YW50IHRvIGhhdmUgdGhlIHByZXZpb3VzIGluZm8gc3RvcmVkIGluIHRoZSBTZXVyYXQgb2JqZWN0LgpwYm1jIDwtIENyZWF0ZVNldXJhdE9iamVjdChyYXcuZGF0YSA9IHBibWMuZGF0YSwgbWluLmNlbGxzID0gNSwgcHJvamVjdCA9ICJjb250cm9sX1BCTUMiKQoKYGBgCgojIFdlIGhhdmUgYSBmZXcgZ29hbHMgaW4gdGhpcyBzZWN0aW9uIG9mIHRoZSBhbmFseXNpcy4gIAojICAgMS4gIGlkZW50aWZ5IGNlbGwgdHlwZXMgcHJlc2VudCBpbiBib3RoIHRoZSBjb250cm9sIHBibWMgYW5kIHN0aW11bGF0ZWQgcGJtYyBkYXRhc2V0cwojICAgMi4gIGZpbmQgbWFya2VycyB0aGF0IGlkZW50aWZ5IGNlbGwgdHlwZXMgdGhhdCBhcmUgY29uc2VydmVkIGluIGNvbnRyb2wgYW5kIHN0aW11bGF0ZWQgcGJtY3MKIyAgIDMuICBjb21wYXJlIHRoZSBkYXRhc2V0cyB0byBmaW5kIGNlbGwtdHlwZSBzcGVjaWZpYyByZXNwb25zZXMgdG8gaW50ZXJmZXJvbiBzdGltdWxhdGlvbiAKCiMgUmVhbGx5LCB0aGUgZ29hbCBpcyB0byByZWluZm9yY2UgdGhlIG1ham9yIHN0ZXBzIGluIHNjUk5BLXNlcSBhbmFseXNpcyBieSBnb2luZyBvdmVyIHNvbWUgb2YgdGhlbSBhZ2Fpbi4gIFRoaXMgdGltZSwgd2Ugc2hvdyBob3cgZXZlbiBhIHNpbXBsZSBleHBlcmltZW50YWwgZGVzaWduIChjb250cm9sIHZzIHN0aW11bGF0ZWQpIGNhbiBjb21wbGljYXRlIHRoZSBhbmFseXNpcy4KCgoKIyBGaWx0ZXJpbmcsIG5vcm1hbGl6YXRpb24sIHNjYWxpbmcsIGFuZCBmaW5kIEhWR3MKYGBge3J9CgpWbG5QbG90KG9iamVjdCA9IHN0aW0sIGZlYXR1cmVzLnBsb3QgPSBjKCJuR2VuZSIsICJuVU1JIiksIG5Db2wgPSAyLCBwb2ludC5zaXplLnVzZSA9IDAuMDAxKQoKYGBgYAoKYGBge3J9CkdlbmVQbG90KG9iamVjdCA9IHN0aW0sIGdlbmUxID0gIm5VTUkiLCBnZW5lMiA9ICJuR2VuZSIpCmBgYAoKYGBge3J9CiMgRmlsdGVyIG91dCB0aGUgc3RpbXVsYXRlZCBwYm1jcyB3aXRoIGxvdyB0b3RhbCBnZW5lIGV4cHJlc3Npb24Kc3RpbSA8LSBGaWx0ZXJDZWxscyhvYmplY3QgPSBzdGltLCBzdWJzZXQubmFtZXMgPSAibkdlbmUiLCBsb3cudGhyZXNob2xkcyA9IDUwMCwgaGlnaC50aHJlc2hvbGRzID0gMTgwMCkKIyBub3JtYWxpemUKc3RpbSA8LSBOb3JtYWxpemVEYXRhKHN0aW0pCiMgc2NhbGUKc3RpbSA8LSBTY2FsZURhdGEoc3RpbSkKIyBGaW5kIHZhcmlhYmxlIGdlbmVzCnN0aW0gPC1GaW5kVmFyaWFibGVHZW5lcyhzdGltKQojIG1ha2UgbWV0YWRhdGEgaW5kaWNhdGluZyBpdCBpcyBzdGltdWxhdGVkCnN0aW1AbWV0YS5kYXRhJHN0aW0gPC0gIlNUSU0iCgojIHllcywgd2UgYWxyZWFkeSBkaWQgdGhpcyBmb3IgdGhlIGNvbnRyb2wgZGF0YXNldCwgYnV0IHRoZSBkb3duc3RyZWFtIGFuYWx5c2lzIHJlcXVpcmVzIGEgYml0IG1vcmUgc2VsZWN0aXZlIGZpbHRlcmluZyBmb3IgaXQgdG8gcnVuLiAgVGhlIG9ubHkgY2hhbmdlcyB3ZSBhcmUgbWFraW5nIGlzIGNob29zaW5nIGNlbGxzIHdpdGggNTAwLTE4MDAgZ2VuZXMgaW5zdGVhZCBvZiAyMDAtMTgwMCBnZW5lcy4KcGJtYyA8LSBGaWx0ZXJDZWxscyhvYmplY3QgPSBwYm1jLCBzdWJzZXQubmFtZXMgPSAibkdlbmUiLCBsb3cudGhyZXNob2xkcyA9IDUwMCwgaGlnaC50aHJlc2hvbGRzID0gMTgwMCkKIyBub3JtYWxpemUKcGJtYyA8LSBOb3JtYWxpemVEYXRhKHBibWMpCiMgc2NhbGUKcGJtYyA8LSBTY2FsZURhdGEocGJtYykKIyBGaW5kIHZhcmlhYmxlIGdlbmVzCnBibWMgPC1GaW5kVmFyaWFibGVHZW5lcyhwYm1jKQojIG1ha2UgbWV0YWRhdGEgaW5kaWNhdGluZyBpdCBpcyBzdGltdWxhdGVkCnBibWNAbWV0YS5kYXRhJHN0aW0gPC0gIkNUUkwiCgojIENhbGN1bGF0ZXMgYXZlcmFnZSBleHByZXNzaW9uIGFuZCBkaXNwZXJzaW9uLCB1c2luZyB6LXNjb3JlcyB0byBkZXRlcm1pbmUgb3V0bGllcnMsIHdoaWNoIGFjY291bnRzIGZvciB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gdmFyaWFiaWxpdHkgYW5kIGF2ZyBleHByZXNzaW9uLgoKYGBgCgpgYGB7cn0KIyBOb3cgZmluZCB0aGUgaGlnaGx5IHZhcmlhYmxlIGdlbmVzIHRoYXQgYXJlIHNoYXJlZCBiZXR3ZWVuIHRoZSB0d28gZGF0YXNldHMgKGNvbnRyb2wgYW5kIHN0aW11bGF0ZWQpCgpnLjEgPC0gaGVhZChyb3duYW1lcyhwYm1jQGh2Zy5pbmZvKSwgMTAwMCkKZy4yIDwtIGhlYWQocm93bmFtZXMoc3RpbUBodmcuaW5mbyksIDEwMDApCgojIGtlZXBzIG9ubHkgdW5pcXVlIGdlbmVuYW1lcyAoZ2V0cyByaWQgb2YgZHVwbGljYXRlcykKZ2VuZXMudXNlIDwtIHVuaXF1ZShjKGcuMSwgZy4yKSkKZ2VuZXMudXNlIDwtIGludGVyc2VjdChnZW5lcy51c2UsIHJvd25hbWVzKHBibWNAc2NhbGUuZGF0YSkpCmdlbmVzLnVzZSA8LSBpbnRlcnNlY3QoZ2VuZXMudXNlLCByb3duYW1lcyhzdGltQHNjYWxlLmRhdGEpKQpgYGAKCgojIENhbm9uaWNhbCBDb3JyZWxhdGlvbiBBbmFseXNpcyAoQ0NBKQoKYGBge3J9CiMgUnVuIENDQQogICMgSW5zZXJ0IHNvbWUgaW5mbyB0byBkZXNjcmliZSBDQ0EuCmltbXVuZS5jb21iaW5lZCA8LSBSdW5DQ0EocGJtYywgc3RpbSwgZ2VuZXMudXNlID0gZ2VuZXMudXNlLCBudW0uY2MgPSAzMCkKCiMgVmlzdWFsaXplIENDQSByZXN1bHRzCgogICMgcGxvdCBDQzEgdnMgQ0MyCnAxIDwtIERpbVBsb3Qob2JqZWN0ID0gaW1tdW5lLmNvbWJpbmVkLCByZWR1Y3Rpb24udXNlID0gImNjYSIsIGdyb3VwLmJ5ID0gInN0aW0iLCBwdC5zaXplID0gMC41LCBkby5yZXR1cm4gPSBUUlVFKQogICMgdmlvbGluIHBsb3QgdG8gdmlzdWFsaXplIENDMSBhbmQgQ0MyCnAyIDwtIFZsblBsb3Qob2JqZWN0ID0gaW1tdW5lLmNvbWJpbmVkLCBmZWF0dXJlcy5wbG90ID0gIkNDMSIsIGdyb3VwLmJ5ID0gInN0aW0iLCBkby5yZXR1cm4gPSBUUlVFLCBwb2ludC5zaXplLnVzZSA9IDAuMDAxKQpwMyA8LSBWbG5QbG90KG9iamVjdCA9IGltbXVuZS5jb21iaW5lZCwgZmVhdHVyZXMucGxvdCA9ICJDQzIiLCBncm91cC5ieSA9ICJzdGltIiwgZG8ucmV0dXJuID0gVFJVRSwgcG9pbnQuc2l6ZS51c2UgPSAwLjAwMSkKcGxvdChwMSkKcGxvdF9ncmlkKHAyLCBwMykKCmBgYAoKIyBDaG9vc2UgQ0NzCgpgYGB7cn0KCiMgTXVjaCBsaWtlIHNlbGVjdGluZyB0aGUgbnVtYmVyIG9mIFBDcyB0byB1c2UgaW4gdGhlIGZpcnN0IGFuYWx5c2lzLCB3ZSBtdXN0IHNlbGVjdCB0aGUgbnVtYmVyIG9mIENDcyB0byB1c2UgaGVyZS4gIFRoZSBNZXRhZ2VuQmljb3JQbG90IGZ1bmN0aW9uIGJlbG93IGlzIGFuYWxvZ291cyB0byB0aGUgZWxib3cgcGxvdCBtZXRob2QgdXNlZCBpbiB0aGUgZmlyc3QgYW5hbHlzaXMgb2YgMSBkYXRhc2V0LiAgWW91IGxvb2sgZm9yIHNhdHVyYXRpb24gKGZsYXRsaW5lKS4KCiMgMiB3YXlzIHRvIHBpY2sgQ0NzLCBidXQgd2Ugd29uJ3QgcnVuIHRoZSBmaXJzdCBiZWNhdXNlIGl0IHRha2VzIHRvbyBsb25nIHRvIGNvbXB1dGUgZm9yIHRoZSB0aW1lIHdlIGhhdmUgaW4gY2xhc3MuICBGZWVsIGZyZWUgdG8gdHJ5IGl0IG9uIHlvdXIgb3duIQoKIyAjIDEuICBNZXRhZ2VuZUJpY29yUGxvdAojIHA0IDwtIE1ldGFnZW5lQmljb3JQbG90KGltbXVuZS5jb21iaW5lZCwgZ3JvdXBpbmcudmFyID0gInN0aW0iLCBkaW1zLmV2YWwgPSAxOjMwLCBkaXNwbGF5LnByb2dyZXNzID0gVFJVRSkKcDQKCiMgMi4gSGVhdG1hcCAtIHVzZSB0aGUgdG9wIDUwMCBjZWxscwogICMgeW91IG5lZWQgdGhyZWUgcGFnZXMgdG8gc2VlIGFsbCB0aGUgQ0NzCiAgIyBwdXJwbGUgPSBsb3cgZXhwcmVzc2lvbgogICMgeWVsbG93ID0gaGlnaApEaW1IZWF0bWFwKG9iamVjdCA9IGltbXVuZS5jb21iaW5lZCwgcmVkdWN0aW9uLnR5cGUgPSAiY2NhIiwgY2VsbHMudXNlID0gNTAwLCBkaW0udXNlID0gMTo5LAogICAgICAgICAgIGRvLmJhbGFuY2VkID0gVFJVRSkKCkRpbUhlYXRtYXAob2JqZWN0ID0gaW1tdW5lLmNvbWJpbmVkLCByZWR1Y3Rpb24udHlwZSA9ICJjY2EiLCBjZWxscy51c2UgPSA1MDAsIGRpbS51c2UgPSAxMDoxOCwKICAgICAgICAgICBkby5iYWxhbmNlZCA9IFRSVUUpCgpEaW1IZWF0bWFwKG9iamVjdCA9IGltbXVuZS5jb21iaW5lZCwgcmVkdWN0aW9uLnR5cGUgPSAiY2NhIiwgY2VsbHMudXNlID0gNTAwLCBkaW0udXNlID0gMTk6MzAsCiAgICAgICAgICAgZG8uYmFsYW5jZWQgPSBUUlVFKQoKIyBIb3cgbWFueSBDQ3MgZG8geW91IHRoaW5rIHdlIHNob3VsZCBwaWNrPwoKYGBgCgojIEFsaWduIHRoZSBDQ0Egc3Vic3BhY2VzIGFuZCB2aXN1YWxpemUKCmBgYHtyfQojIHVzZSB0aGUgZmlyc3QgMjAgQ0NzIHRvIGdldCBhIG5ldyBkaW1lbnNpb24gcmVkdWN0aW9uIHRoYXQgeW91IGNhbiB2aXN1YWxpemUgYW5kIHVzZSBmb3IgY2x1c3RlcmluZwoKaW1tdW5lLmNvbWJpbmVkIDwtIEFsaWduU3Vic3BhY2UoaW1tdW5lLmNvbWJpbmVkLCByZWR1Y3Rpb24udHlwZSA9ICJjY2EiLCBncm91cGluZy52YXIgPSAic3RpbSIsIAogICAgICAgICAgICAgICAgICAgIGRpbXMuYWxpZ24gPSAxOjIwKQoKIyB2aXN1YWxpemUgdGhlIGFsaWduZWQgQ0NBIC0gaG93IGRvZXMgdGhpcyBjb21wYXJlIHRvIGJlZm9yZSBhbGlnbm1lbnQ/CgpwMSA8LSBWbG5QbG90KG9iamVjdCA9IGltbXVuZS5jb21iaW5lZCwgZmVhdHVyZXMucGxvdCA9ICJBQ0MxIiwgZ3JvdXAuYnkgPSAic3RpbSIsIGRvLnJldHVybiA9ICJUUlVFIiwgcG9pbnQuc2l6ZS51c2UgPSAwLjAxKQpwMiA8LSBWbG5QbG90KG9iamVjdCA9IGltbXVuZS5jb21iaW5lZCwgZmVhdHVyZXMucGxvdCA9ICJBQ0MyIiwgZ3JvdXAuYnkgPSAic3RpbSIsIGRvLnJldHVybiA9ICJUUlVFIiwgcG9pbnQuc2l6ZS51c2UgPSAwLjAxKQpwbG90X2dyaWQocDEsIHAyKQoKIyBvYmplY3RAZHIkcmVkdWN0aW9uLnR5cGUuYWxpZ25lZAoKYGBgCgojIEZpbmQgY2x1c3RlcnMgdXNpbmcgdGhlIGFsaWduZWQgZGF0YQoKYGBge3J9CiMgUnVuIHQtU05FCmltbXVuZS5jb21iaW5lZCA8LSBTZXVyYXQ6OlJ1blRTTkUoaW1tdW5lLmNvbWJpbmVkLCByZWR1Y3Rpb24udXNlID0gImNjYS5hbGlnbmVkIiwgZGltcy51c2UgPSAxOjIwLCBkby5mYXN0ID0gVCkKCiMgY2x1c3RlciBiYXNlZCBvbiB0LVNORSBzcGFjZQppbW11bmUuY29tYmluZWQgPC0gRmluZENsdXN0ZXJzKGltbXVuZS5jb21iaW5lZCwgcmVkdWN0aW9uLnR5cGUgPSAiY2NhLmFsaWduZWQiLCByZXNvbHV0aW9uID0gMC42LCBkaW1zLnVzZSA9IDE6MjApCgojIFZpc3VhbGl6ZSB0aGUgZGF0YXNldCBhbGlnbm1lbnQgYW5kIGNvbWJpbmVkIGNsdXN0ZXJpbmcgcmVzdWx0cyBvbiB0LVNORQpwMSA8LSBUU05FUGxvdChpbW11bmUuY29tYmluZWQsIGRvLnJldHVybiA9IFQsIHB0LnNpemUgPSAwLjUsIGdyb3VwLmJ5ID0gInN0aW0iKQpwMiA8LSBUU05FUGxvdChpbW11bmUuY29tYmluZWQsIGRvLmxhYmVsID0gVCwgIGRvLnJldHVybiA9IFQsIHB0LnNpemUgPSAwLjUpCnBsb3RfZ3JpZChwMSwgcDIpCgpgYGAKCgojIERpZmZlcmVudGlhbCBnZW5lIGV4cHJlc3Npb24gb2YgbWFya2VycyBjb25zZXJ2ZWQgYWNyb3NzIGNvbmRpdGlvbnMKCmBgYHtyfQoKIyBJZGVudGlmeSBjb25zZXJ2ZWQgY2VsbCB0eXBlIG1hcmtlcnMgCiAgIyBDb25zZXJ2ZWQgY2VsbCB0eXBlIG1ha3JlcyBhcmUgdGhvc2UgdGhhdCBpZGVudGlmeSBhIHBhcnRpY3VsYXIgY2VsbCB0eXBlIGluIGJvdGggY29udHJvbCAgICAgICBwYm1jIGFuZCBzdGltdWxhdGVkIHBibWMpLiAgVGhlIEZpbmRDb25zZXJ2ZWRtYXJrZXJzIGZ1bmN0aW9uIHVzZXMgZGlmZmVyZW50aWFsIGdlbmUgICAgICAgICAgICAgZXhwcmVzc2lvbiBhbmFseXNpcyB0byBkbyB0aGlzLgoKIyBBcyBhbiBleGFtcGxlLCBsZXQncyBsb29rIGZvciBtYXJrZXJzIHRoYXQgYXJlIGNvbnNlcnZlZCBiZXR3ZWVuIGNvbnRyb2wgYW5kIHN0aW11bGF0ZWQgY2VsbHMgICAgaW4gY2x1c3RlciA3LCBkZWZpbmVkIGluIHRoZSAiaWRlbnQuMSIgYXJndW1lbnQuCmNsdXN0ZXI3Lm1hcmtlcnMgPC0gRmluZENvbnNlcnZlZE1hcmtlcnMoaW1tdW5lLmNvbWJpbmVkLCBpZGVudC4xID0gNywgZ3JvdXBpbmcudmFyID0gInN0aW0iLCBwcmludC5iYXIgPSBGQUxTRSkKIyB2aWV3IHRoZSBmaXJzdCBmZXcgbWFya2VycwpjbHVzdGVyNy5tYXJrZXJzWzE6OSxdCgojIENvbmZpcm0gdGhhdCB0aG9zZSBtYXJrZXJzIGZvciBjbHVzdGVyIDcgaWRlbnRpZmllZCBmYWxsIGludG8gdGhhdCBsb2NhdGlvbiBvbiB0LVNORS4KRmVhdHVyZVBsb3Qob2JqZWN0ID0gaW1tdW5lLmNvbWJpbmVkLCBmZWF0dXJlcy5wbG90ID0gcm93bmFtZXMoY2x1c3RlcjcubWFya2VycylbMTo5XSwgbWluLmN1dG9mZiA9ICJxOSIsIGNvbHMudXNlID0gYygibGlnaHRncmV5IiwgImJsdWUiKSwgcHQuc2l6ZSA9IDAuNSkKCiMgQmFzZWQgb24gdGhvc2UgcmVzdWx0cywgd2hhdCBjZWxsIHR5cGUgaXMgY2x1c3RlciA3PwoKYGBgCgpgYGB7cn0KIyBFeHBsb3JlIG1hcmtlcnMgb2YgZGlmZmVyZW50IGltbXVuZSBjZWxsIHBvcHVsYXRpb25zIHRvIHRyeSB0byBpZGVudGlmeSB3aGF0IGNlbGwgdHlwZSBlYWNoIGNsdXN0ZXIgY29udGFpbnMuICBTZWxlY3QgY2FuZGlkYXRlcyBiYXNlZCBvZmYgb2YgcHJpb3Iga25vd2xlZGdlIG9mIGltbXVuZSBjZWxsIG1hcmtlcnMuCkZlYXR1cmVQbG90KG9iamVjdCA9IGltbXVuZS5jb21iaW5lZCwgZmVhdHVyZXMucGxvdCA9IGMoIkNEM0QiLCAiU0VMTCIsICJDUkVNIiwgIkNEOEEiLCAiR05MWSIsICJDRDc5QSIsICJGQ0dSM0EiLCAiQ0NMMiIsICJQUEJQIiksIG1pbi5jdXRvZmYgPSAicTkiLCBjb2xzLnVzZSA9IGMoImxpZ2h0Z3JleSIsICJibHVlIiksIHB0LnNpemUgPSAwLjUpCgojIE5vdywgeW91IGNhbiByZW5hbWUgeW91ciBjbHVzdGVycyBhcyB0aGVzZSBjZWxsIG5hbWVzLiAgVHJ1c3QgdGhhdCB0aGV5IGFyZSBjb3JyZWN0IDopCm5ldy5pZGVudCA8LSBjKCJDRDE0IE1vbm8iLCAiQ0Q0IE5haXZlIFQiLCAiQ0Q0IE1lbW9yeSBUIiwgIkIiLCAiQ0QxNiBNb25vIiwgCiAgICAiVCBhY3RpdmF0ZWQiLCAiQ0Q4IFQiLCAiTksiLCAiREMiLCAiQiBhY3RpdmF0ZWQiLCAiTWsiLCAicERDIiwgIkVyeXRoIikKZm9yIChpIGluIDA6MTIpIHsKICAgIGltbXVuZS5jb21iaW5lZCA8LSBSZW5hbWVJZGVudChvYmplY3QgPSBpbW11bmUuY29tYmluZWQsIG9sZC5pZGVudC5uYW1lID0gaSwgCiAgICAgICAgbmV3LmlkZW50Lm5hbWUgPSBuZXcuaWRlbnRbaSArIDFdKQp9CgojIFJ1biB0LVNORSB0byBzZWUgeW91ciBuZXcgY2x1c3RlciBuYW1lcwpUU05FUGxvdChpbW11bmUuY29tYmluZWQsIGRvLmxhYmVsID0gVCwgcHQuc2l6ZSA9IDAuNSkKCiMgdXNlIFNQbGl0RG90UGxvdEdHIHRvIHBsb3QgbWFya2VycyBvZiBlYWNoIGNlbGwgdHlwZSAodXNpbmcgcHJpb3Iga25vd2xlZGdlIGFnYWluKS4KaW1tdW5lLmNvbWJpbmVkQGlkZW50IDwtIGZhY3RvcihpbW11bmUuY29tYmluZWRAaWRlbnQsIGxldmVscyA9IChjKCJwREMiLCAiRXJ5dGgiLCAKICAgICJNayIsICJEQyIsICJDRDE0IE1vbm8iLCAiQ0QxNiBNb25vIiwgIkIgYWN0aXZhdGVkIiwgIkIiLCAiQ0Q4IFQiLCAiTksiLCAKICAgICJUIGFjdGl2YXRlZCIsICJDRDQgTmFpdmUgVCIsICJDRDQgTWVtb3J5IFQiKSkpCm1hcmtlcnMudG8ucGxvdCA8LSBjKCJDRDNEIiwgIkNSRU0iLCAiSFNQSDEiLCAiU0VMTCIsICJHSU1BUDUiLCAiQ0FDWUJQIiwgIkdOTFkiLCAKICAgICJOS0c3IiwgIkNDTDUiLCAiQ0Q4QSIsICJNUzRBMSIsICJDRDc5QSIsICJNSVIxNTVIRyIsICJOTUUxIiwgIkZDR1IzQSIsIAogICAgIlZNTzEiLCAiQ0NMMiIsICJTMTAwQTkiLCAiSExBLURRQTEiLCAiR1BSMTgzIiwgIlBQQlAiLCAiR05HMTEiLCAiSEJBMiIsIAogICAgIkhCQiIsICJUU1BBTjEzIiwgIklMM1JBIiwgIklHSiIpCnNkcCA8LSBTcGxpdERvdFBsb3RHRyhpbW11bmUuY29tYmluZWQsIGdlbmVzLnBsb3QgPSByZXYobWFya2Vycy50by5wbG90KSwgY29scy51c2UgPSBjKCJibHVlIiwgCiAgICAicmVkIiksIHgubGFiLnJvdCA9IFQsIHBsb3QubGVnZW5kID0gVCwgZG90LnNjYWxlID0gOCwgZG8ucmV0dXJuID0gVCwgZ3JvdXBpbmcudmFyID0gInN0aW0iKQpgYGBgCgoKIyBEaWZmZXJlbnRpYWwgZ2VuZSBleHByZXNzaW9uIG9mIG1hcmtlcnMgdGhhdCBjaGFuZ2UgYWNyb3NzIGNvbmRpdGlvbnMgKGN0cmwgdnMgc3RpbXVsYXRlZCkuCgpgYGB7cn0KIyBJdCdzIGdyZWF0IHRoYXQgd2UgY2FuIGlkZW50aWZ5IGNvbnNlcnZlZCBtYXJrZXJzIGFjcm9zcyBkYXRhc2V0cyBiZWNhdXNlIGl0IGFsbG93cyB1cyB0byBiZSBjb25maWRlbnQgdGhhdCB3ZSBoYXZlIGlkZW50aWZpZWQgc3VicG9wdWxhdGlvbnMgb2YgY2VsbCB0eXBlcyB0aGF0IGFyZSBwcmVzZW50IGluIGJvdGggZGF0YXNldHMsIGN0cmwgdnMgc3RpbXVsYXRlZC4gIEhvd2V2ZXIsIHdoYXQgaXMgcmVhbGx5IGludGVyZXN0aW5nIGlzIHdoYXQgQ0hBTkdFUyB3aGVuIHlvdSBzdGltdWxhdGUgdGhlIGNlbGxzLiAgTGV0J3MgZmluZCBvdXQuCgojIEZpcnN0IHdlIG5lZWQgdG8gZGVmaW5lIHNvbWUgcGxvdHRpbmcgZnVuY3Rpb25zIHRvIG1ha2UgbGFiZWxpbmcgZWFzaWVyLiAgRG9uJ3Qgd29ycnkgYWJvdXQgdHJ5aW5nIHRvIHVuZGVyc3RhbmQgd2hhdCBlYWNoIGxpbmUgaXMgZG9pbmcsIGl0IGlzIG5vdCBpbnRlcmVzdGluZy4gIEp1c3QgcnVuIGl0IQoKTGFiZWxQb2ludCA8LSBmdW5jdGlvbihwbG90LCBnZW5lcywgZXhwLm1hdCwgYWRqLngudCA9IDAsIGFkai55LnQgPSAwLCBhZGoueC5zID0gMCwgCiAgICAgICAgICAgICAgICAgICAgICAgYWRqLnkucyA9IDAsIHRleHQuc2l6ZSA9IDIuNSwgc2VnbWVudC5zaXplID0gMC4xKSB7CiAgZm9yIChpIGluIGdlbmVzKSB7CiAgICB4MSA8LSBleHAubWF0W2ksIDFdCiAgICB5MSA8LSBleHAubWF0W2ksIDJdCiAgICBwbG90IDwtIHBsb3QgKyBhbm5vdGF0ZSgidGV4dCIsIHggPSB4MSArIGFkai54LnQsIHkgPSB5MSArIGFkai55LnQsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWwgPSBpLCBzaXplID0gdGV4dC5zaXplKQogICAgcGxvdCA8LSBwbG90ICsgYW5ub3RhdGUoInNlZ21lbnQiLCB4ID0geDEgKyBhZGoueC5zLCB4ZW5kID0geDEsIHkgPSB5MSArIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGoueS5zLCB5ZW5kID0geTEsIHNpemUgPSBzZWdtZW50LnNpemUpCiAgfQogIHJldHVybihwbG90KQp9CgpMYWJlbFVSIDwtIGZ1bmN0aW9uKHBsb3QsIGdlbmVzLCBleHAubWF0LCBhZGoudS50ID0gMC4xLCBhZGouci50ID0gMC4xNSwgYWRqLnUucyA9IDAuMDUsIAogICAgICAgICAgICAgICAgICAgIGFkai5yLnMgPSAwLjA1LCAuLi4pIHsKICByZXR1cm4oTGFiZWxQb2ludChwbG90LCBnZW5lcywgZXhwLm1hdCwgYWRqLnkudCA9IGFkai51LnQsIGFkai54LnQgPSBhZGouci50LCAKICAgICAgICAgICAgICAgICAgICBhZGoueS5zID0gYWRqLnUucywgYWRqLngucyA9IGFkai5yLnMsIC4uLikpCn0KCkxhYmVsVUwgPC0gZnVuY3Rpb24ocGxvdCwgZ2VuZXMsIGV4cC5tYXQsIGFkai51LnQgPSAwLjEsIGFkai5sLnQgPSAwLjE1LCBhZGoudS5zID0gMC4wNSwgCiAgICAgICAgICAgICAgICAgICAgYWRqLmwucyA9IDAuMDUsIC4uLikgewogIHJldHVybihMYWJlbFBvaW50KHBsb3QsIGdlbmVzLCBleHAubWF0LCBhZGoueS50ID0gYWRqLnUudCwgYWRqLngudCA9IC1hZGoubC50LCAKICAgICAgICAgICAgICAgICAgICBhZGoueS5zID0gYWRqLnUucywgYWRqLngucyA9IC1hZGoubC5zLCAuLi4pKQp9CgpgYGAKCmBgYHtyfQojIE5vdywgbGV0J3Mgc2VlIGhvdyBuYWl2ZSBUIGNlbGxzIHJlc3BvbmQgdG8gc3RpbXVsYXRpb24gd2l0aCBpbnRlcmZlcm9uIGdhbW1hLgoKdC5jZWxscyA8LSBTdWJzZXREYXRhKGltbXVuZS5jb21iaW5lZCwgaWRlbnQudXNlID0gIkNENCBOYWl2ZSBUIiwgc3Vic2V0LnJhdyA9IFQpCnQuY2VsbHMgPC0gU2V0QWxsSWRlbnQodC5jZWxscywgaWQgPSAic3RpbSIpCmF2Zy50LmNlbGxzIDwtIGxvZzFwKEF2ZXJhZ2VFeHByZXNzaW9uKHQuY2VsbHMsIHNob3cucHJvZ3Jlc3MgPSBGQUxTRSkpCmF2Zy50LmNlbGxzJGdlbmUgPC0gcm93bmFtZXMoYXZnLnQuY2VsbHMpCgpwMSA8LSBnZ3Bsb3QoYXZnLnQuY2VsbHMsIGFlcyhDVFJMLCBTVElNKSkgKyBnZW9tX3BvaW50KCkgKyBnZ3RpdGxlKCJDRDQgTmFpdmUgVCBDZWxscyIpCnBsb3QocDEpCmBgYAoKYGBge3J9CiMgTGV0J3MgYWxzbyBzZWUgaG93IENEMTQgbW9ub2N5dGVzIHJlc3BvbmQgdG8gc3RpbXVsYXRpb24gd2l0aCBpbnRlcmZlcm9uIGdhbW1hLgoKY2QxNC5tb25vIDwtIFN1YnNldERhdGEoaW1tdW5lLmNvbWJpbmVkLCBpZGVudC51c2UgPSAiQ0QxNCBNb25vIiwgc3Vic2V0LnJhdyA9IFQpCmNkMTQubW9ubyA8LSBTZXRBbGxJZGVudChjZDE0Lm1vbm8sIGlkID0gInN0aW0iKQphdmcuY2QxNC5tb25vIDwtIGxvZzFwKEF2ZXJhZ2VFeHByZXNzaW9uKGNkMTQubW9ubywgc2hvdy5wcm9ncmVzcyA9IEZBTFNFKSkKYXZnLmNkMTQubW9ubyRnZW5lIDwtIHJvd25hbWVzKGF2Zy5jZDE0Lm1vbm8pCgpwMiA8LSBnZ3Bsb3QoYXZnLmNkMTQubW9ubywgYWVzKENUUkwsIFNUSU0pKSArIGdlb21fcG9pbnQoKSArIGdndGl0bGUoIkNEMTQgTW9ub2N5dGVzIikKCnBsb3QocDIpCmBgYAoKYGBge3J9CiMgSWYgeW91IHdlcmUgdG8gZ28gaW4gYW5kIGZpbmQgdGhlIGdlbmVzIHRoYXQgbGllIGFib3ZlIHRoZSBsaW5lYXIgY29ycmVsYXRpb24sIHlvdSB3b3VsZCBmaW5kIHRoZXNlOgoKZ2VuZXMudG8ubGFiZWwxID0gYygiSVNHMTUiLCAiTFk2RSIsICJJRkk2IiwgIklTRzIwIiwgIk1YMSIpCmdlbmVzLnRvLmxhYmVsMiA9IGMoIklGSVQyIiwgIklGSVQxIikKZ2VuZXMudG8ubGFiZWwzID0gYygiQ1hDTDEwIiwgIkNDTDgiKQoKIyBOb3csIHBsb3QgdGhlbSBvbiB0aGUgc2NhdHRlcnBsb3RzIGFuZCBzZWUgd2hlcmUgdGhleSBmYWxsLiAgVGhlc2UgZW5kIHVwIGJlaW5nIHRoZSBnZW5lcyB0aGF0IHJlc3BvbmQgc3BlY2lmaWNhbGx5IHRvIGludGVyZmVyb24gZ2FtbWEgc3RpbXVsYXRpb24sIGJvdGggaW4gbmFpdmUgVCBjZWxscyBhbmQgQ0QxNCBtb25vY3l0ZXMgLSBhbiBpbnRlcmZlcm9uIGdhbW1hIHJlc3BvbnNlIHBhdGh3YXkgdGhhdCBtYW55IGNlbGxzIGhhdmUuCgpwMSA8LSBMYWJlbFVSKHAxLCBnZW5lcyA9IGMoZ2VuZXMudG8ubGFiZWwxLCBnZW5lcy50by5sYWJlbDIpLCBhdmcudC5jZWxscywgCiAgICBhZGoudS50ID0gMC4zLCBhZGoudS5zID0gMC4yMykKcDEgPC0gTGFiZWxVTChwMSwgZ2VuZXMgPSBnZW5lcy50by5sYWJlbDMsIGF2Zy50LmNlbGxzLCBhZGoudS50ID0gMC41LCBhZGoudS5zID0gMC40LCAKICAgIGFkai5sLnQgPSAwLjI1LCBhZGoubC5zID0gMC4yNSkKcDIgPC0gTGFiZWxVUihwMiwgZ2VuZXMgPSBjKGdlbmVzLnRvLmxhYmVsMSwgZ2VuZXMudG8ubGFiZWwzKSwgYXZnLmNkMTQubW9ubywgCiAgICBhZGoudS50ID0gMC4zLCBhZGoudS5zID0gMC4yMykKcDIgPC0gTGFiZWxVTChwMiwgZ2VuZXMgPSBnZW5lcy50by5sYWJlbDIsIGF2Zy5jZDE0Lm1vbm8sIGFkai51LnQgPSAwLjUsIGFkai51LnMgPSAwLjQsIAogICAgYWRqLmwudCA9IDAuMjUsIGFkai5sLnMgPSAwLjI1KQpwbG90X2dyaWQocDEscDIpCmBgYAoKYGBge3J9CiMgTm93LCBsb29rIGZvciByZXNwb25zZXMgc3BlY2lmaWMgdG8gcGFydGljdWxhciBjZWxsIHR5cGVzLgoKIyBjb2RlIHRvIGdyYWIgcGFydGljdWxhciBjZWxsIHR5cGVzCmltbXVuZS5jb21iaW5lZEBtZXRhLmRhdGEkY2VsbHR5cGUuc3RpbSA8LSBwYXN0ZTAoaW1tdW5lLmNvbWJpbmVkQGlkZW50LCAiXyIsIAogICAgaW1tdW5lLmNvbWJpbmVkQG1ldGEuZGF0YSRzdGltKQppbW11bmUuY29tYmluZWQgPC0gU3Rhc2hJZGVudChpbW11bmUuY29tYmluZWQsIHNhdmUubmFtZSA9ICJjZWxsdHlwZSIpCmltbXVuZS5jb21iaW5lZCA8LSBTZXRBbGxJZGVudChpbW11bmUuY29tYmluZWQsIGlkID0gImNlbGx0eXBlLnN0aW0iKQoKIyBDRDE0IG1vbm9jeXRlcwpDRDE0bW9uby5pbnRlcmZlcm9uLnJlc3BvbnNlIDwtIEZpbmRNYXJrZXJzKGltbXVuZS5jb21iaW5lZCwgaWRlbnQuMSA9ICJDRDE0IE1vbm9fU1RJTSIsIGlkZW50LjIgPSAiQ0QxNCBNb25vX0NUUkwiLCBwcmludC5iYXIgPSBGQUxTRSkKaGVhZChDRDE0bW9uby5pbnRlcmZlcm9uLnJlc3BvbnNlLCAxNSkKCiMgQ0Q0IG5haXZlIFQgY2VsbHMKQ0Q0bmFpdmVULmludGVyZmVyb24ucmVzcG9uc2UgPC0gRmluZE1hcmtlcnMoaW1tdW5lLmNvbWJpbmVkLCBpZGVudC4xID0gIkNENCBOYWl2ZSBUX1NUSU0iLCBpZGVudC4yID0gIkNENCBOYWl2ZSBUX0NUUkwiLCBwcmludC5iYXIgPSBGQUxTRSkKaGVhZChDRDRuYWl2ZVQuaW50ZXJmZXJvbi5yZXNwb25zZSwgMTUpCgojIEIgY2VsbHMKYi5pbnRlcmZlcm9uLnJlc3BvbnNlIDwtIEZpbmRNYXJrZXJzKGltbXVuZS5jb21iaW5lZCwgaWRlbnQuMSA9ICJCX1NUSU0iLCBpZGVudC4yID0gIkJfQ1RSTCIsIAogICAgcHJpbnQuYmFyID0gRkFMU0UpCmhlYWQoYi5pbnRlcmZlcm9uLnJlc3BvbnNlLCAxNSkKCmBgYAoKYGBge3J9CiMgTm93IHZpc3VhbGl6ZSB0aGUgdG9wIDggZm9sZCBjaGFuZ2VzIGZvciB0aGVzZSAzIGdyb3VwcyBvZiBjZWxscwoKIyBGZWF0dXJlSGVhdG1hcAoKIyBDRDE0IG1vbm9jeXRlcwpGZWF0dXJlSGVhdG1hcChpbW11bmUuY29tYmluZWQsIGZlYXR1cmVzLnBsb3QgPSByb3duYW1lcyhDRDE0bW9uby5pbnRlcmZlcm9uLnJlc3BvbnNlKVsxMDA6MTA3XSwgZ3JvdXAuYnkgPSAic3RpbSIsIHB0LnNpemUgPSAwLjI1LCBrZXkucG9zaXRpb24gPSAidG9wIiwgbWF4LmV4cCA9IDMpCgojIENENCBuYWl2ZSBUIGNlbGxzCkZlYXR1cmVIZWF0bWFwKGltbXVuZS5jb21iaW5lZCwgZmVhdHVyZXMucGxvdCA9IHJvd25hbWVzKENENG5haXZlVC5pbnRlcmZlcm9uLnJlc3BvbnNlKVsxOjhdLCBncm91cC5ieSA9ICJzdGltIiwgcHQuc2l6ZSA9IDAuMjUsIGtleS5wb3NpdGlvbiA9ICJ0b3AiLCBtYXguZXhwID0gMykKCiMgQiBjZWxscwpGZWF0dXJlSGVhdG1hcChpbW11bmUuY29tYmluZWQsIGZlYXR1cmVzLnBsb3QgPSByb3duYW1lcyhiLmludGVyZmVyb24ucmVzcG9uc2UpWzE6OF0sIGdyb3VwLmJ5ID0gInN0aW0iLCBwdC5zaXplID0gMC4yNSwga2V5LnBvc2l0aW9uID0gInRvcCIsIG1heC5leHAgPSAzKQoKYGBgCgojIFNhdmUgdGhlIG9iamVjdHMKCmBgYHtyfQojIHNhdmUgdGhpcyB3b3JrIGFuZCBjb21lIGJhY2sgdG8gaXQgbGF0ZXIKCnNhdmVSRFMocGJtYywgZmlsZSA9IHBhc3RlKGRpcmVjdG9yeSwgIi9wYm1jX2NvbWJpbmVkLnJkcyIsIHNlcCA9ICIiKSkKc2F2ZVJEUyhzdGltLCBmaWxlID0gcGFzdGUoZGlyZWN0b3J5LCAiL3N0aW1fY29tYmluZWQucmRzIiwgc2VwID0gIiIpKQpzYXZlUkRTKGltbXVuZS5jb21iaW5lZCwgZmlsZSA9IHBhc3RlKGRpcmVjdG9yeSwgIi9pbW11bmVfY29tYmluZWQucmRzIiwgc2VwID0gIiIpKQpgYGAKCgo=